带有商店的无限循环和带有ngFor的http

时间:2017-10-06 04:51:06

标签: angular ngrx

我对此代码有无限循环: 模板:

<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

1 个答案:

答案 0 :(得分:3)

它实际上并不是一个无限循环。

如果在模板中绑定函数,则每次运行角度变化检测时都会调用该函数。

总的来说,这是不好的做法。而是将结果分配给字段并改为绑定到该字段。

constructor() {
  this.data = service.dataLoadAsync();
} 

<ng-container *ngFor="let row of service.data | async">