我在Service
创建了angular
,要求服务或web-API
有2个method
,如:
query(state: any, url: string, param?: any): void {
url = this.baseUrl + url;
this.isBusy.value = true;
this.fetch(url, state, param)
.subscribe((x) => {
this.isBusy.value = false;
this.view = x;
}
);
}
fetch(url: string, state: any, param?: any): Observable<GridDataResult> {
state.dontShowSnak = true;
let params = new HttpParams();
if (param != null) {
params = params.append('param', param);
}
return this.http
.post(url, state, {params: params})
.map(response => (<GridDataResult>{
data: response['result']['items'],
total: parseInt(response['result']['totalCount'], 10)
}));
}
这项服务是全球性的,所有应用程序都可以使用它。
现在!我有一个带有4个标签的页面。当页面启动时,第一个选项卡正在加载,如果我将更改选项卡并转到第二个选项卡(在获得第一个选项卡的响应之前),在第二个选项卡中,我将获得第一个选项卡的响应或数据。为什么?
问题出在哪儿?这是kendo
的问题?还是我的service
?
Kendo-grid
一起工作但现在我改变了我的service
并为4个标签创建了4个separate
service
,我没有这个问题。即使我要更改标签,所有数据都是正确的,然后才能获得最后一个标签的响应。
你可以在switchMap上使用map
而不是http.post()
。这将终止正在进行的请求(从tab1启动)并为第二个选项卡创建一个新的Observable
。这样您现在只能获取第二个选项卡的数据。
import { switchMap } from 'rxjs/operators';
fetch(url: string, state: any, param?: any): Observable<GridDataResult> {
......................
return this.http
.post(url, state, {params: params})
.switchMap(response => { // using switchMap
return Observable.of ({
data: response['result']['items'],
total: parseInt(response['result']['totalCount'], 10)
}) as Observable<GridDataResult>;
}));
}