{ id:123, version 1, ...}
我正在编写一个使用onPush变化检测策略的Angular 2组件。我想知道在确定对象是否已更改时是否有办法在onPush上使用自定义逻辑。我的理解是onPush检查对象引用,只有在发送对象的新实例时才更新。
我的应用会跟踪自己的对象版本,这意味着每个对象都有一个ID和版本号。我定期刷新服务器中的数据,这意味着即使数据实际没有更改,也会实例化新对象。这意味着有些情况下默认的onPush会看到一个新的实例化对象,并认为它必须更新。实际上,id和版本号是相同的,所以即使对象引用已经改变,我也可以跳过更新组件。
我希望能够为onPush提供一个自定义函数,它实际上使用这样的函数来进行更改检查。
(obj1, obj2) => obj1.id === obj2.id && obj1.version === obj2.version
是否可以自定义onPush逻辑,或者是否有另一种方法可以实现此目的,这样我就不需要在对象引用发生变化时不必要地更新组件,但数据却没有。
答案 0 :(得分:0)
我不认为可以创建自定义changeDetectionStrategy
。但是如果你自己跟踪对象的变化,你可以做一些事情(可能)更加优化。
您可以注入ChangeDetectorRef
并告诉Angular您的组件不应再被监视(这非常酷且功能强大!)。
constructor(private _cd: ChangeDetectorRef)
ngOnInit() {
this._cd.detach();
}
ngOnChanges() {
// check if your objects have changed here
// if they've changed, tells Angular to check
// the bindings manually
this._cd.detectChanges();
}