尝试使用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
使用字符串键的注入正在传递,但是使用令牌的注入失败。有什么想法吗?
答案 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);
}