Angular 服务注入错误,除非导出注入令牌 注入错误,除非导出注入令牌
aot束后 我在惰性加载功能模块的@NgModule decorator中配置了一个服务提供者, 使用自行创建的InjectionTokenAngular 服务注入错误,除非导出注入令牌 注入错误,除非导出注入令牌,angular,typescript,Angular,Typescript,aot束后 我在惰性加载功能模块的@NgModule decorator中配置了一个服务提供者, 使用自行创建的InjectionToken const featureServiceInjectToken = new InjectionToken('FEATURE_SERVICE') // export const featureServiceInjectToken = new InjectionToken('FEATURE_SERVICE') @NgModule({ declarat
const featureServiceInjectToken = new InjectionToken('FEATURE_SERVICE')
// export const featureServiceInjectToken = new InjectionToken('FEATURE_SERVICE')
@NgModule({
declarations: [FeatureComponent],
imports: [
CommonModule,
RouterModule.forChild([
{
path: '',
component: FeatureComponent,
data: {
serToken: featureServiceInjectToken
}
}
])
],
providers: [
{
provide: featureServiceInjectToken,
useClass: FeatureService,
}
]
})
export class FeatureModule { }
创建的令牌是通过route config的data属性传递给组件的,在组件的构造函数中,我想得到这个自定义令牌的服务
//In Component:
constructor(
injector: Injector,
route: ActivatedRoute,
) {
const token = route.snapshot.data['serToken']
this.feaSer = injector.get(token)
}
生成生产代码后出现InjectionError错误:
NullInjectorError: StaticInjectorError(s)[InjectionToken FEATURE_SERVICE]:
StaticInjectorError(Platform: core)[InjectionToken FEATURE_SERVICE]:
NullInjectorError: No provider for InjectionToken FEATURE_SERVICE!
NullInjectorError: StaticInjectorError(s)[InjectionToken FEATURE_SERVICE]:
StaticInjectorError(Platform: core)[InjectionToken FEATURE_SERVICE]:
NullInjectorError: No provider for InjectionToken FEATURE_SERVICE!
在多次尝试更改代码后,通过导出此InjectionToken常量解决了问题:
export const featureServiceInjectToken = new InjectionToken('FEATURE_SERVICE')
非常奇怪,我没有也不需要在其他ts文件中导入这个令牌变量
有人能解释一下吗?
代码如下:
Angular 7.2.0版和8.0.3版存在相同的问题
_ _ ____ _ ___
/ \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
/ △ \ | '_ \ / _` | | | | |/ _` | '__| | | | | | |
/ ___ \| | | | (_| | |_| | | (_| | | | |___| |___ | |
/_/ \_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
|___/
Angular CLI: 8.0.6
Node: 10.16.0
OS: linux x64
Angular: 8.0.3
... animations, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router
Package Version
-----------------------------------------------------------
@angular-devkit/architect 0.800.6
@angular-devkit/build-angular 0.800.6
@angular-devkit/build-optimizer 0.800.6
@angular-devkit/build-webpack 0.800.6
@angular-devkit/core 8.0.6
@angular-devkit/schematics 8.0.6
@angular/cli 8.0.6
@ngtools/webpack 8.0.6
@schematics/angular 8.0.6
@schematics/update 0.800.6
rxjs 6.4.0
typescript 3.4.5
webpack 4.30.0
您可以阅读有关AOT的官方文档
编译器只能解析对导出符号的引用
这也是AOT限制的一部分,必须导出不可折叠的表达式。谢谢!