如何解决ngDoCheck 不为具有项目数组的对象触发
我在 ngDoCheck 的帮助下监听对象属性的变化 实现如下
differ: any;
pageSettings:SelectionSettings;
选择设置在哪里
export interface SelectionSettings {
boolPpt: boolean;
maxRows: number;
startIndex:number;
valuesToSelect: Colum[];
}
属性 valuesToSelect 是一个项目数组,本质上是动态的。 [项目可以添加或从列表中删除以及项目可以更新]
ngDoCheck 初始化如下
constructor( private differs: keyvalueDiffers) {
this.differ = differs.find({}).create();
this.initializeSettings();
}
ngDoCheck() {
var changes = this.differ.diff(this.pageSettings);
if (changes) {
console.log('changes detected');
changes.forEachChangedItem(r => console.log('changed ',r.currentValue));
changes.forEachAddedItem(r => console.log('added ' + r.currentValue));
changes.forEachRemovedItem(r => console.log('removed ' + r.currentValue));
} else {
console.log('nothing changed');
}
}
initializeSettings() {
this.pageSettings = {
boolPpt: false,maxRows: 100,startIndex: -1,valuesToSelect: [
{
name: "sadsa",index: -1,type: "string",bgcolor:"#0000CD"
},{
name: "xxzc",bgcolor:"#1000CD"
}
]
}
}
pageSettings 的更新发生在组件内部的不同位置,例如表格单元格的点击事件或复选框更改事件等
这是针对除数组 valuesToSelect 之外的所有属性更改触发的。每当我添加新项目或删除属性 SelectionSettings.valuesToSelect 的项目时,都会检测到更改。但是如果我们更新 SelectionSettings.valuesToSelect 中现有的项目,ngDoCheck 不会检测到任何更改。
如何检测或监听 SelectionSettings 的所有属性以及子数组属性的变化
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。