Angular 2 中 onPush 变化检测的自定义函数

Custom function for onPush change detection in Angular 2

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

我正在编写一个 Angular 2 组件,它使用 onPush 变化检测策略。我想知道在确定对象是否已更改时是否有一种方法可以在 onPush 中使用自定义逻辑。我的理解是 onPush 检查对象引用,因此仅在发送对象的新实例时更新。

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

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

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

是否可以自定义 onPush 逻辑,或者是否有其他方法可以实现这一点,这样当对象引用发生变化但数据没有发生变化时,我不需要不必要地更新组件。

我认为不可能创建自定义 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();
}