angular - 我如何获得 angular2 依赖注入(inject)以与值(value)提供者一起工作

标签 angular dependency-injection angular2-services

我正在关注依赖注入(inject)的 Angular 文档,并尝试复制 dependency injection tokens 上的部分.但很明显我还是不明白。

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

在最简单的层面上,我只想提供一个常量字符串

// 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 - 我如何获得 angular2 依赖注入(inject)以与值(value)提供者一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39344266/

相关文章:

java - JAX-RS/ Jersey : How can I "inherit" @Provider fields?

angular - 如何在 typescript 的泛型类中创建一个类型为 'T' 的新对象?

error-handling - Angular 2. 如何在 Observable 中使用重定向处理 4xx 错误?

Angular:将数据传递给组件的最佳方式(对象与许多参数)

Angular 2 : [ngClass] update condition in the function

.net - 许可组件不能很好地与 DI 设计配合使用

Angular 2模块通信

Angular2+ Material 菜单的行为与菜单不同

angular - NGXS:如何测试一个 Action 是否被调度?

dependency-injection - 向 Unity 注册