我如何获得 angular2 依赖注入以与价值提供者一起工作
how do I get angular2 dependency injection to work with value providers
我正在关注有关依赖注入的 angular 文档,并尝试复制 dependency injection tokens 上的部分。但很明显我还是不明白。
我正在尝试使用 value provider
将 config:any
注入到我的项目中。
在最简单的层面上,我只想provide
一个常量字符串
// app-modules.ts
const CFG_STRING = "I was declared externally and injected in ngModule"
@NgModule({
imports: [ BrowserModule ],
declarations: [ App ],
providers: [
{provide: CFG_STRING, useValue: CFG_STRING}
],
bootstrap: [ App ]
})
和inject
到组件构造器
// app.ts
const LOCAL_STRING = "I was declared in the local module"
export class App {
constructor(
// @Optional() cfgString: CFG_STRING
) {
this.name = 'Angular2'
this.local = LOCAL_STRING
/* provided/injected */
// this.injectedStr = cfgString
}
}
但是当我这样做时,应用程序无法正确 运行。我做错了什么?
这是一个 plunkr:http://plnkr.co/edit/sQwxyDqLkMTgVUjJ1yYF?p=preview
如果您不使用类型作为提供者的密钥,而是使用字符串或 OpaqueToken
,您需要将密钥传递给 @Inject()
constructor(
@Inject('CFG_STRING') /* @Optional()*/ cfgString: CFG_STRING
) {
并像
一样提供
providers: [
{provide: 'CFG_STRING', useValue: CFG_STRING}
],
CFG_STRING
不是类型,因此不能用作键。你要么使用一些字符串,要么提到一个 OpaqueToken
。可以是任意字符串,只需要匹配 provide
和 @Inject()
我正在关注有关依赖注入的 angular 文档,并尝试复制 dependency injection tokens 上的部分。但很明显我还是不明白。
我正在尝试使用 value provider
将 config:any
注入到我的项目中。
在最简单的层面上,我只想provide
一个常量字符串
// app-modules.ts
const CFG_STRING = "I was declared externally and injected in ngModule"
@NgModule({
imports: [ BrowserModule ],
declarations: [ App ],
providers: [
{provide: CFG_STRING, useValue: CFG_STRING}
],
bootstrap: [ App ]
})
和inject
到组件构造器
// app.ts
const LOCAL_STRING = "I was declared in the local module"
export class App {
constructor(
// @Optional() cfgString: CFG_STRING
) {
this.name = 'Angular2'
this.local = LOCAL_STRING
/* provided/injected */
// this.injectedStr = cfgString
}
}
但是当我这样做时,应用程序无法正确 运行。我做错了什么?
这是一个 plunkr:http://plnkr.co/edit/sQwxyDqLkMTgVUjJ1yYF?p=preview
如果您不使用类型作为提供者的密钥,而是使用字符串或 OpaqueToken
,您需要将密钥传递给 @Inject()
constructor(
@Inject('CFG_STRING') /* @Optional()*/ cfgString: CFG_STRING
) {
并像
一样提供 providers: [
{provide: 'CFG_STRING', useValue: CFG_STRING}
],
CFG_STRING
不是类型,因此不能用作键。你要么使用一些字符串,要么提到一个 OpaqueToken
。可以是任意字符串,只需要匹配 provide
和 @Inject()