使用InjectionToken进行注入?

时间:2019-02-15 01:38:08

标签: javascript angular typescript stackblitz

尝试使用InjectionToken注入对象。

AppModule中,我有:

    export const tokenConfigKey = new InjectionToken('config');

    const tokenBasedConfig = {
        provide: tokenConfigKey,
        useValue: {
          key: 'value'
      }
    }

AppComponent中:

    @Component({
      selector: 'my-app',
      template:`<h1>Hello Angular Lovers!</h1>`
    })
    export class AppComponent  {
      constructor(@Inject('config') config,
                  @Inject(tokenConfigKey) configByToken) {
      }
    }

This is a complete stacblitz example

使用字符串键的注入正在传递,但是使用令牌的注入失败。有什么想法吗?

文章

Here's an article in case anyone wants to play with this

1 个答案:

答案 0 :(得分:2)

由于AppModule导入了AppComponent,而AppComponent则从AppModule导入了InjectionToken,因此可能存在循环依赖问题。

移动令牌以单独解决该问题:

token.ts

import { InjectionToken } from '@angular/core';
export const BASE_URL = new InjectionToken<string>('BaseUrl');

app.module.ts

@NgModule({
  providers: [{ provide: BASE_URL, useValue: { key: 'http://localhost' } }],

app.component.ts

 constructor(@Inject(BASE_URL) configByToken) {
    console.log(configByToken);
  }