【发布时间】:2018-05-31 20:18:39
【问题描述】:
我遇到了问题。我使用服务来存储数组,在父组件我做的对于数组和我传递给数组元素的子组件,数组BehaviorSubject,两个组件都有Onpush策略,从子组件内部,调用方法正在通过服务更改数组元素。 所以如果是一次修改,那么修改是在子组件中绘制的,如果有延迟,就没有。
我该如何解决这个问题?
【问题讨论】:
我遇到了问题。我使用服务来存储数组,在父组件我做的对于数组和我传递给数组元素的子组件,数组BehaviorSubject,两个组件都有Onpush策略,从子组件内部,调用方法正在通过服务更改数组元素。 所以如果是一次修改,那么修改是在子组件中绘制的,如果有延迟,就没有。
我该如何解决这个问题?
【问题讨论】:
这里是解决方案Stackblitz
我认为问题与一些涉及immutable.js 的不变性和 Angular 更改检测的错误有关。我应用的修复只是通过创建和返回新对象的函数传递来自流的数据,以便可以触发 ngChangeDetection。
*在以下代码中,sinppet data 是 immutable.js 的 BehaviorSubject 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})
}
【讨论】: