在我现有的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的加载方法。所以我决定把这个负载作为下面的提供者:
{
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
}
放完之后,我在控制台中收到一些错误:发生了一些错误。错误:未捕获(在promise中):TypeError:无法读取null的属性'eso'TypeError:无法读取null的属性'eso'
我有一个config.json文件,我有这个'eso'属性,我使用上面的提供程序(AppConfig)加载。
任何人都可以建议,如上所述,提供商部分是否有任何订单问题?或者是否存在多旗问题?
任何帮助将不胜感激。
我想你的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());
};