Angular 服务注入错误,除非导出注入令牌 注入错误,除非导出注入令牌

Angular 服务注入错误,除非导出注入令牌 注入错误,除非导出注入令牌,angular,typescript,Angular,Typescript,aot束后 我在惰性加载功能模块的@NgModule decorator中配置了一个服务提供者, 使用自行创建的InjectionToken const featureServiceInjectToken = new InjectionToken('FEATURE_SERVICE') // export const featureServiceInjectToken = new InjectionToken('FEATURE_SERVICE') @NgModule({ declarat

aot束后

我在惰性加载功能模块的@NgModule decorator中配置了一个服务提供者, 使用自行创建的InjectionToken

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限制的一部分,必须导出不可折叠的表达式。谢谢!