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