【问题标题】:Asynchronous change of an element in BehaviorSubjectBehaviorSubject 中元素的异步更改
【发布时间】:2018-05-31 20:18:39
【问题描述】:

我遇到了问题。我使用服务来存储数组,在父组件我做的对于数组和我传递给数组元素的子组件,数组BehaviorSubject,两个组件都有Onpush策略,从子组件内部,调用方法正在通过服务更改数组元素。 所以如果是一次修改,那么修改是在子组件中绘制的,如果有延迟,就没有。

我该如何解决这个问题?

stackbiz:https://stackblitz.com/edit/angular-vywwsb

【问题讨论】:

    标签: angular rxjs


    【解决方案1】:

    这里是解决方案Stackblitz

    我认为问题与一些涉及immutable.js 的不变性和 Angular 更改检测的错误有关。我应用的修复只是通过创建和返回新对象的函数传递来自流的数据,以便可以触发 ngChangeDetection。

    *在以下代码中,sinppet data 是 immutable.jsBehaviorSubject List BehaviorSubject(List(array_of_objects));

    // OLD
    <ng-container *ngFor="let item of (data |async );
                    trackBy: trackByFn;
                    let first = first">
                {{item['list'].send}}
                <app-item [item]="item" [first]="first"></app-item>
    </ng-container>
    
    //FIX
    <ng-container *ngFor="let item of (data |async );
                    trackBy: trackByFn;
                    let first = first">
                {{item['list'].send}}
                <app-item [item]="func(item)" [first]="first"></app-item>
    </ng-container>
    
    //WHERE func
    
    func(obj){
    return ({...obj})
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      • 2021-09-04
      相关资源
      最近更新 更多