我有一项提供config
数据的服务。
@Injectable()
export class ConfigData {
someObj: any;
constructor(private http: HttpClient) {
this.http.get('/config-data').subscribe((data) => {this.someObj = data})
}
}
现在我想使用该对象在另一个服务中设置静态变量。
@Injectable()
export class AnotherService {
public static A_STATIC_VAR = ConfigData.someObj.specific_value
constructor(){}
}
如果我将ConfigData
添加到AnotherService
中的构造函数中它没用,因为它没有及时将值赋给静态变量。它们在其他地方使用时已经“未定义”。
有没有办法实现这个目标?
答案 0 :(得分:2)
为了处理此类情况,要在应用程序启动之前将配置设置初始化,您可以使用APP_INITALIZER
提供程序。 APP_INITALIZER
collect可以接受承诺,它将在应用初始化之前解决这些承诺。在您的情况下,它将确保在您开始使用它之前ConfigData
已准备就绪。
@NgModule({
imports: [HttpClientModule],
providers: [
ConfigData,
{
provide: APP_INITIALIZER,
useFactory: (configData: ConfigData) => {
return () => configData.getConfiguration().toPromise()
},
deps: [ConfigData],
multi: true
}
]
})
export class AppLoadModule { }
<强>服务强>
@Injectable()
export class ConfigData {
someObj: any;
constructor(private http: HttpClient) {
}
//created method to return observable,
//so that we can use it in APP_INITIALIZER
getConfiguration(){
return this.http.get('/config-data').do(
(data) => {this.someObj = data}
);
}
}