gpt4 book ai didi

angular - DoCheck 的 KeyValueDiffers 是否仅适用于每个组件的一个对象?

转载 作者:太空狗 更新时间:2023-10-29 17:45:43 24 4
gpt4 key购买 nike

首先,我在我的 ngDoCheck 方法中使用了这个并且工作得很好:

var productChanges = this.differ.diff(this.myProduct);

然后决定检查我组件的第二个模型的更改并添加以下行:

var companyChanges = this.differ.diff(this.myCompany);

并且两个更改都在单独的 if 语句中检查,但只有最后一个被调用 (companyChanges)

这是预期的行为吗? ngDoCheck 是否仅适用于每个组件的一个对象?

为了清楚起见,这里是我的完整 ngDoCheck 方法:

ngDoCheck() {
var productChanges = this.differ.diff(this.myProduct);

//DOESN'T IT CHECK 2 MODELS LIKE SO BELOW ?
//var companyChanges = this.differ.diff(this.myCompany);

if (productChanges) {
// console.log('Product changes detected');

productChanges.forEachChangedItem((r: KeyValueChangeRecord) => {

if (r.currentValue && r.currentValue != r.previousValue) {
this.filterProduct(r.currentValue, r.key);

}
});
}

编辑:通过阅读其他问题和答案,我觉得我需要分享这个:

在组件构造函数中,differ 定义如下:

this.differ = differs.find({}).create(null);

可能这是首先需要改变的。

最佳答案

阅读@thierry-templier 对这个问题的回答后:Detect changes in objects inside array in Angular2我已经弄清楚它是如何工作的:

类级别的不同对象应为每个要观察的模型包含单独的键,至于它们的值需要在 ngOnInit 或构造函数中分别设置不同的观察者分别引用每个模型。 (Thierry 在 ngOnInit 中完成,我在构造函数中完成)

constructor(private differs: KeyValueDiffers){
this.differ = {};

this.differ['myCompany'] = differs.find(this.myCompany).create(null);
.
.
.
this.differ['myProduct'] = differs.find(this.myProduct).create(null);
}

ngDoCheck() {
var productChanges = this.differ['myProduct'].diff(this.myProduct);
var companyChanges = this.differ['myCompany'].diff(this.myCompany);

if (productChanges) {
// Do your thing
}

if (companyChanges) {
// Do your thing
}
}

关于angular - DoCheck 的 KeyValueDiffers 是否仅适用于每个组件的一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39224444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com