Angular 2中onPush变化检测的自定义功能

时间:2017-03-16 17:35:46

标签: javascript angular rxjs angular2-changedetection

{ id:123, version 1, ...}

我正在编写一个使用onPush变化检测策略的Angular 2组件。我想知道在确定对象是否已更改时是否有办法在onPush上使用自定义逻辑。我的理解是onPush检查对象引用,只有在发送对象的新实例时才更新。

我的应用会跟踪自己的对象版本,这意味着每个对象都有一个ID和版本号。我定期刷新服务器中的数据,这意味着即使数据实际没有更改,也会实例化新对象。这意味着有些情况下默认的onPush会看到一个新的实例化对象,并认为它必须更新。实际上,id和版本号是相同的,所以即使对象引用已经改变,我也可以跳过更新组件。

我希望能够为onPush提供一个自定义函数,它实际上使用这样的函数来进行更改检查。

(obj1, obj2) => obj1.id === obj2.id && obj1.version === obj2.version 

是否可以自定义onPush逻辑,或者是否有另一种方法可以实现此目的,这样我就不需要在对象引用发生变化时不必要地更新组件,但数据却没有。

1 个答案:

答案 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();
}