我对此代码有无限循环: 模板:
<ng-container *ngFor="let row of service.dataLoadAsync() | async">
服务:
dataLoadAsync(filters: FinishedCallsFilter = {}): Observable<FinishedCall[]> {
return this.httpFinishedCallsObservable(Object.assign({limit: this.limit}, {})).flatMap(response => {
this.store.dispatch(new ReplaceMany(response.items))
return this.store
})
}
我也试过这个功能实现:
dataLoadAsync(filters: FinishedCallsFilter = {}): Observable<FinishedCall[]> {
this.httpFinishedCallsObservable(Object.assign({limit: this.limit}, {}))
.subscribe(response => this.store.dispatch(new ReplaceMany(response.items)))
return this.store
}
private httpFinishedCallsObservable(params: { limit: number, tag ?: string }) {
return this.http.post(this.apiUrl, params)
.map((json) => this.parseHttp(json))
.do(response => this.tagStore.dispatch(new UpdateTag(response.tag)))
}
所以,问题。没有http请求,evferything很好。但后来我尝试在循环中下载数据并更新存储,dataLoadAsync
函数调用很多次。
如何修复代码?我想使用store for cache
答案 0 :(得分:3)
它实际上并不是一个无限循环。
如果在模板中绑定函数,则每次运行角度变化检测时都会调用该函数。
总的来说,这是不好的做法。而是将结果分配给字段并改为绑定到该字段。
constructor() {
this.data = service.dataLoadAsync();
}
和
<ng-container *ngFor="let row of service.data | async">