在我现有的angular4应用程序app.module.ts中,我具有以下APP_INITIALIZER提供程序:
{
provide: APP_INITIALIZER,
useFactory: (config: AntiforgeryService) => () => config.Load(),
deps: [AntiforgeryService, GlobalService],
multi: true
},
{
provide: HTTP_INTERCEPTORS,
useClass: RebarInterceptor,
multi: true
},
{
provide: ErrorHandler,
useClass: GlobalExceptionHandler
}
此后,我有一个要求,我必须在所有HTTP调用中传递一些令牌。因此,我必须先调用AntiforgeryService的load方法。因此,我决定将此负载作为提供者,如下所示:
{
provide: APP_INITIALIZER,
useFactory: (config: AppConfig) => () => config.load(),
deps: [AppConfig],
multi: true
},
{
provide: APP_INITIALIZER,
useFactory: (config: AntiforgeryService) => () => config.Load(),
deps: [AntiforgeryService, GlobalService],
multi: true
},
{
provide: HTTP_INTERCEPTORS,
useClass: RebarInterceptor,
multi: true
},
{
provide: ErrorHandler,
useClass: GlobalExceptionHandler
}
输入此内容后,控制台出现错误: 发生了一些错误。错误:未捕获(承诺):TypeError:无法读取null的属性“ eso” TypeError:无法读取null的属性'eso'
我有一个config.json文件,其中有此“ eso”属性,正在使用上述提供程序(AppConfig)加载该文件。
有人可以建议,如上所述,提供商部分是否有任何订单问题?还是存在多标志问题?
任何帮助将不胜感激。
答案 0 :(得分:0)
我想您的AntiforgeryService
使用AppConfig
中的eso属性。 APP_INITILAIZER
方法可以同时运行。我的建议是做一个大的初始化器:
{
provide: APP_INITIALIZER,
useFactory: loadConfigs,
deps: [AppConfig, AntiforgeryService],
multi: true
},
并创建了这样的导出函数:(导出否则AOT无效)
export const loadConfigs = (app: AppConfig, af: AntiforgeryService) => {
return app.load().then(() => af.load());
};