Angular 2传递参数到服务构造器

bat*_*anz 18 angular

我们假设我有这个Angular 2服务:

@Injectable()
class Demo {
    constructor(private instanceSpecificString: string) {
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,其构造函数接受特定于实例的字符串.我的意思是我想多次实例化这个服务,每次实例化时,我想根据实例化服务的上下文传递一个不同的字符串.

我怎么做?

PS constructor用作示例,但参数可以很容易地是类型string,string或者甚至是某种配置string.

awi*_*man 4

传递给您的服务的值将由实例化它的注入器确定。您也许可以在组件定义之一中执行此操作:

@Component({
    ...
    providers: [
        provide(string, {useValue: "someSpecificValue"})
    ]
})
Run Code Online (Sandbox Code Playgroud)

但是,这存在一个问题,即您正在为字符串标记定义提供程序,这可能会导致可维护性问题。

为您的服务定义一些配置模型可能是一个更好的模式:

class DemoConfig {
    instanceSpecificString: string;
}
Run Code Online (Sandbox Code Playgroud)

然后您可以创建一个实例来传递给您的服务。

let config = { instanceSpecificString: "someSpecificValue" }

@Component({
    ...
    providers: [
        provide(DemoConfig, {useExisting: config})
    ]
})
Run Code Online (Sandbox Code Playgroud)

希望这有帮助。我自己还没有尝试过;我在应用程序中使用的服务是单例的。这是我使用的参考:

https://angular.io/docs/ts/latest/api/core/index/provide-function.html