我在启动时使用http从asp.net web api加载配置数据APP_initializer。我的灵感来自这个stackoverflow线程Angular2 load configuration from backend on startup和this
providers: [
HttpClient,
{
provide: APP_INITIALIZER,
useFactory: (appConfigSvc:AppConfigService) => () => {
appConfigSvc.load();
},
deps: [AppConfigService],
multi: true
}, AppConfigService
@Injectable()
export class AppConfigService {
private serviceApiUrl = "api/AppConfigApi/";
public applicationConfig: Appconfigmodel.IAppConfigModel;
constructor(private _http: Http) {
}
getApiConfig(): Appconfigmodel.IAppConfigModel {
return this.applicationConfig;
}
load() { this.getApplicationConfig(); }
getApplicationConfig(): Observable<Appconfigmodel.IAppConfigModel> {
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({
headers: headers
});
//pulling config data from web.config of a ASP.Net Web API2
return this._http.get(this.serviceApiUrl + 'GetApplicationConfig', options)
.map((response: Response) => <Appconfigmodel.IAppConfigModel>response.json())
.do(data => console.log('All: ' + JSON.stringify(data)))
.catch(this.handleError);
}
export class FirstComponent {
constructor(private _appConfigService: AppConfigService) {
}
ngOnInit() {
this.applicationConfig= this._appConfigService.getApiConfig(); // The config dat is getting as undefined
}
//button click
clickButton()
{
this.applicationConfig= this._appConfigService.getApiConfig(); // The config data is populated here
}
}
问题是,我无法访问任何组件的ngOninit中的配置数据。但它可以在按钮单击事件处理程序或类似方法中访问,这些方法通常在应用程序启动后调用一段时间。
感谢任何帮助。 感谢。
答案 0 :(得分:0)
构造函数(private _appConfigService:AppConfigService){ 这里的构造函数变量应该是public来访问它。
如果您根据我的经验使用angular2,最好使用ng工具。 Angular-cli
npm install angular-cli -g 阅读这些工具的自述文件。 我不会用微软垃圾建立我的前端,尽管我已经软了20多年了。
答案 1 :(得分:0)
如果在调用ngOnInit()
但是适用于点击事件时它无效,请尝试使用ngAfterViewInit()
。我认为应该有效。 https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html