请参阅此StackBlitz。 打开控制台以查看我正在输出的日志:
https://stackblitz.com/edit/pipe-detect-change-array
这是我的应用程序的非常简单的版本。真正的应用程序将项目作为键/值对存储在BehaviorSubject({ [ITEM_ID]: item}
)中,我通过在可观察对象上运行管道来获得单个对象。该组件仅具有对所选项目的访问权限。
我的流程非常简单:更新对象时,我获取主题的值,修改已更改的内容,然后运行subject.next()。然后,这将触发所有订阅再次运行。您可以在控制台(更新数据)和屏幕(显示的阵列)中看到它。
问题:
pure: false
属性无法添加到我的应用程序的管道中,因为它们触发的次数太多,以至于杀死了Chrome 如何获取管道以再次检查阵列?
我想到的唯一解决方案是在更改数据时在组件或服务内部移动管道。我基本上会做类似的事情:
data$.pipe(
map(res => {
const pipe = new DummyPipe();
res['children']= pipe.transform(res['children'])
return res;
})
)