Angular 页面重新加载后,APP\ U初始值设定项未定义的结果
我有一个简单的配置服务,我在APP.shared.module.ts中连接了APP_初始化器令牌:Angular 页面重新加载后,APP\ U初始值设定项未定义的结果,angular,typescript,Angular,Typescript,我有一个简单的配置服务,我在APP.shared.module.ts中连接了APP_初始化器令牌: ConfigService, { provide: APP_INITIALIZER, useFactory: (configService: ConfigService) => () => configService.getStuff(), deps: [Confi
ConfigService,
{
provide: APP_INITIALIZER,
useFactory: (configService: ConfigService) =>
() => configService.getStuff(),
deps: [ConfigService],
multi: true
},
这将执行订阅(config.service.ts):
当我转到主页并从那里刷新应用程序时,一切正常。
调用逻辑并返回数据。
但是,当我刷新使用组件并调用构造函数的特定页面时,数据返回似乎很晚,因此我在这里得到未定义的返回:
this.settings = this.configService.settings;
我猜“连线”是错误的
有什么建议可以解决吗?要让Angular等待您的自定义应用程序初始值设定项完成,它必须返回一个承诺。您的getStuff
方法没有返回任何内容,这意味着Angular不会等待此.settings
设置
您可以使用将您的可观察
转换为承诺
。以下是一个基本示例:
getStuff(): Promise<void> {
return this.getSettings()
.toPromise()
.then(data => {
this.settings = data;
});
}
getStuff():承诺{
返回此参数。getSettings()
.toPromise()
。然后(数据=>{
此参数设置=数据;
});
}
我相信你在跟踪。他忽略提到的一个警告是,即使有了这个建议,您仍然有义务为每个环境编译index.html,其唯一目的是更改每个环境的
。确保您没有白白实现它。@Stavm是的,我会按环境编译。回到我最初的问题——坦率地说,我对(1)这种实现和(2)我在这里没有选择和(3)承诺在这里产生如此大的影响和(4)我不能依赖通常的页面生命周期感到恼火。这很烦人。
this.settings = this.configService.settings;
getStuff(): Promise<void> {
return this.getSettings()
.toPromise()
.then(data => {
this.settings = data;
});
}