我对角度场景相当陌生,我开始将我的头发从某些意外行为中解脱出来。角度 - 服务中的观察对象
我在IntegrationsService下面的代码
queryList(): Observable<ApiList[]> {
if(this.loadingApiList == true) {
return Observable.of(this.queryListResult);
}
this.loadingApiList = true;
return this._http
.get('samples/apiList.json').map((response: Response) => <ApiList[]> response.json())
.do(data => {
this.queryListResult = data;
});
}
我怎样才能阻止这个呼叫正在对网页加载路由执行两次?当我不使用航线
getApiName(IT_ID:number) {
console.log(this.queryListResult);
let obj = this.queryListResult.find(o => o.IT_ID == IT_ID);
if(obj) {
return obj.IT_Name;
}
return false;
}
这完美的作品,但是当我使用:
组件调用此方法,并建立在导航列表,也是另一个组件调用下列方法相同的服务路由getApiName返回未定义的结果。
我也使用了解析对象,这确实解决了问题,但随后两个调用正在对json文件进行,这就是我使用的。
resolve(route: ActivatedRouteSnapshot, state:RouterStateSnapshot):Observable<any>{
return this._service.queryList() // We need this to finish first.
}
我现在真的卡住 - 我能得到它的工作使用的决心,但有两次调用以.json这是一种浪费。
这样做的正确方法是什么?
设定了标志,并不一定意味着该操作完成,并且查询结果列表中已被分配。一种实现这一点的方法是将数据暴露在基于主题的观察值上并触发一次提取,参见例如。 https://blog.jonrshar.pe/2017/Apr/09/async-angular-data.html,其中展示了我们如何使用这种模式。 – jonrsharpe