如何使用angular2依赖注入来处理值提供程序

时间:2016-09-06 08:33:49

标签: angular dependency-injection angular2-services

我正在关注依赖注入的角度文档,并尝试复制dependency injection tokens上的部分。但很明显我仍然没有得到它。

我正在尝试使用value providerconfig:any注入我的项目中。

在最简单的层面上,我只想provide一个const字符串

// 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进入Component构造函数

// 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
  }
}

但是当我这样做时,应用程序无法正常运行。我做错了什么?

这是一个傻瓜:http://plnkr.co/edit/sQwxyDqLkMTgVUjJ1yYF?p=preview

1 个答案:

答案 0 :(得分:1)

如果您不使用类型作为提供商的密钥,而是使用字符串或OpaqueToken,则需要将密钥传递给@Inject()

constructor(
    @Inject('CFG_STRING') /* @Optional()*/ cfgString: CFG_STRING
  ) {

并提供它

  providers: [
    {provide: 'CFG_STRING', useValue: CFG_STRING}
  ],

CFG_STRING不是类型,因此不能用作密钥。你使用一些字符串或提到OpaqueToken。它可以是任何字符串,只需在provide@Inject()

之间匹配