angular - 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",
index: -1,
type: "string",
bgcolor:"#1000CD"
}
]
}
}
pageSettings 的更新发生在组件内部的不同位置,例如表格单元格的单击事件或复选框更改事件等
这会触发除数组 valuesToSelect 之外的所有属性更改。每当我添加新项目或删除属性 SelectionSettings.valuesToSelect 的项目时,都会检测到更改。但是如果我们更新 SelectionSettings.valuesToSelect 中的现有项目,ngDoCheck 不会检测到任何更改。
如何检测或监听 SelectionSettings 的所有属性以及子数组属性的变化
解决方案
推荐阅读
- domain-driven-design - DDD 更正实体的身份
- javascript - `className` 不匹配。服务器:
- mysql - MYSQL TRIGGER AFTER UPDATE 给我这个错误
- python - 将一些特定值添加到 Python 中的另一个列表
- javascript - 如何处理承诺响应?
- php - php,mysql-在一些特殊情况下连接mysql中的三个表
- reactjs - React 中的下拉菜单,通过列表过滤
- java - 如何通过代码调用 Hibernate DDL 生成
- jointjs - JointJS 基线偏移
- java - 如何使用 Java 中子进程的 OutputStream?