我正在尝试将来自另一服务的某些值(从http请求中获得)分配给app.module.ts
中的提供者令牌。
我的服务如下:
@Injectable()
export class AppConfigService {
private appConfig: AppConfig;
constructor(private http: HttpClient) {}
loadConfigurationData = () => {
this.http.get('assets/config/config.json').subscribe(
(response: AppConfig) => {
this.appConfig = response;
},
error => {
this.appConfig = {
baseHref: '/'
};
}
);
};
getBaseHref(): string {
return this.appConfig.baseHref;
}
}
在我的app.module.ts
中,我试图像这样获得该值`baseHref`
:
@NgModule({
providers: [
...
AppConfigService,
{
provide: APP_INITIALIZER,
useFactory: (appConfigService: AppConfigService) => () => {
appConfigService.loadConfigurationData();
},
deps: [AppConfigService],
multi: true
},
{
provide: APP_BASE_HREF,
useFactory: getBaseHref,
deps: [AppConfigService],
multi: true
},
...
],
})
export function getBaseHref(appConfigService: AppConfigService): string {
return appConfigService.getBaseHref();
}
但是我收到一个错误:`Cannot read property 'baseHref' of undefined`
。
好像服务没有初始化,但是为什么呢?将变量从服务传递到提供程序的最佳方法是什么?
答案 0 :(得分:0)
由于您依靠异步数据来更新您的appconfig变量,因此最初它是未定义的
Appconfig必须初始化:
private appConfig: AppConfig = {baseref: null} // or default