问题描述
最近我遇到了在模块中声明的InjectionToken的问题
Recently I've run into problem with InjectionToken, that is declared in module
import {InjectionToken, NgModule} from '@angular/core';
import {SampleComponent} from './sample.component';
export let SOME_TOKEN = new InjectionToken<string>('someToken');
@NgModule({
declarations: [SampleComponent],
providers: [
{provide: SOME_TOKEN, useValue: 'Some value'}
]
})
export class SampleModule {
}
和组件类:
import {Component, Inject, OnInit} from '@angular/core';
import {SOME_TOKEN} from './sample.module';
@Component({
selector: 'sample-component',
templateUrl: './sample.component.html',
styleUrls: ['./sample.component.scss']
})
export class SampleComponent implements OnInit {
constructor(@Inject(SOME_TOKEN) private someValue: string) { }
ngOnInit() {
console.log(this.someValue);
}
}
所有这些给我一个错误:未捕获的错误:无法解析SampleComponent的所有参数:(?).
All this gives me an error:Uncaught Error: Can't resolve all parameters for SampleComponent: (?).
同时,如果我尝试使用string作为在模块中声明的令牌,则一切正常.
At the same time if I try to use string as a token, that declared in module, everything works.
另外,如果我直接在组件文件中声明InjectionToken,然后直接在组件装饰器中设置"providers",那么一切都会再次起作用.
Also, if I declare InjectionToken directly at component file, and then set 'providers' directly inside component decorator, everything works again.
所以问题是:为什么在模块文件中声明的InjectionToken无法用于注入组件.
So the question is: why InjectionToken that is declared inside module file is not available for injection to component.
推荐答案
根据@yurzui,存在循环依赖关系.将令牌移动到单独的文件有帮助.
According to @yurzui, there is a circular dependency.Moving token to separate file helped.
这篇关于模块中声明的InjectionToken的@Inject()在angular2中失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!