微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ngDoCheck 不为​​具有项目数组的对象触发

如何解决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 举报,一经查实,本站将立刻删除。