0%

angular-provider-multi

在Angular中,我们可以通过useClassuseValueuseFactoryuseExisting等属性来指定依赖注入的提供者,但是这些属性只能指定一个提供者,如果我们需要指定多个提供者,该怎么办呢?这时候就需要使用multi属性了。

比如下面这个例子:

1
2
3
4
5
6
7
8
9
10
11
import { InjectionToken, NgModule } from '@angular/core';

export const MY_MULTI_TOKEN = new InjectionToken<string[]>('MyMultiToken');

@NgModule({
providers: [
{ provide: MY_MULTI_TOKEN, useValue: 'Value1', multi: true },
{ provide: MY_MULTI_TOKEN, useValue: 'Value2', multi: true },
],
})
export class AppModule { }

对于MY_MULTI_TOKEN,我们多次使用useValue属性来指定提供者,然后通过multi: true来指定这是一个多提供者。Angular最终会将这些值放到一个数组中返回。所以MY_MULTI_TOKEN最终的值是['Value1', 'Value2']

Angular内置的ROUTEStoken也是multi的,从它的定义就可以看出来,它返回的是Route[]的数组。

1
export declare const ROUTES: InjectionToken<Route[][]>;