我们假设我有这个Angular 2服务:
@Injectable() class Demo { constructor(private instanceSpecificString: string) { } }
请注意,它的构造函数接受一个特定于实例的字符串.我的意思是我想多次实例化这个服务,每次实例化时,我想根据服务被实例化的上下文传递一个不同的字符串.
我怎么做?
附:使用字符串作为示例,但该参数可以容易地是类型号,或布尔型甚至某种配置对象.
传递给您的服务的值将由实例化的注射器决定.您可能可以在其中一个组件定义中执行此操作:
@Component({ ... providers: [ provide(string,{useValue: "someSpecificValue"}) ] })
但是,这是一个问题,您正在为字符串令牌定义提供程序,并可能导致可维护性问题.
为您的服务定义一些配置模型可能是更好的模式:
class DemoConfig { instanceSpecificString: string; }
然后,您可以创建一个传递给您的服务的实例.
let config = { instanceSpecificString: "someSpecificValue" } @Component({ ... providers: [ provide(DemoConfig,{useExisting: config}) ] })
希望这是有帮助的.我没有尝试过这个;我在应用程序中使用的服务是单身人士.这是我使用的参考:
https://angular.io/docs/ts/latest/api/core/index/provide-function.html