如何在Angular 2中更改数据参数?

时间:2018-08-14 14:27:44

标签: arrays angular typescript parameters boolean

更改组件文件中的数据参数时遇到问题:

this.commandList.ListesCommandesATransmettre.forEach(data => {
    this.catalogs.forEach(catalog => {
        if (catalog.Libelle === data.Catalogue) {
            if (catalog.selected === false) {
                console.log(data.isSelected)
                data.isSelected = false;
                console.log(data.isSelected)
                console.log(data);
            }
        }
    })
});

此代码显示:

  

true
  错误

但是isSelectedconsole.log(data)的值仍然是true。那么,为什么false是结果?

3 个答案:

答案 0 :(得分:0)

如果是回调的循环问题,请尝试

for (let data of this.commandList.ListesCommandesATransmettre) {
  for (let catalog of this.catalogs) {
    if (catalog.Libelle === data.Catalogue) {
      if (catalog.selected === false) {
        console.log(data.isSelected)
        data.isSelected = false;
        console.log(data.isSelected)
        console.log(data);
      }
    }
  }
}

答案 1 :(得分:0)

我无法理解您的代码的逻辑。如果this.catalogs有许多符合条件的目录会怎样? isSelected将多次设置为false。

也许可行(如果我理解您的逻辑):

this.commandList.ListesCommandesATransmettre = this.commandList.ListesCommandesATransmettre.map(data => {
    const mutateData = Object.assign({}, data);

    // If condition math, then isSelected set in false. Else, isSelected keep the his value
    mutateData.isSelected = 
        this.catalogs.some(catalog => catalog.Libelle === data.Catalogue && !catalog.selected) ? false : mutateData.isSelected;

    return mutateData;
})

答案 2 :(得分:0)

请尝试使用此代码来测试其是否正确更新。循环将告诉您正确/错误,然后您就可以查看更新数据中的情况。

this.commandList.ListesCommandesATransmettre.forEach((data, index) => {
    this.catalogs.forEach(catalog => {
        if (catalog.Libelle === data.Catalogue) {
            if (catalog.selected === false) {
                data.isSelected = false;
            }
            console.log(index + 'is selected: ' + data.isSelected)
        }
    })
});
console.log(this.commandlist);

我注意到的是,Web浏览器只会在内存中保留对象的“最新”引用。因此,在循环结束后,“最新”引用是最后一个引用。因此,您可能正在查看的是最后一个对象,而不是要测试的对象。如果其他人知道更多信息,或者对实际发生的事情有参考,请编辑这篇文章。