Angular 2:Array.push无法正常工作

4
当我将项目推入数组时,项目被推入了,但问题是数组中的所有项目都变成了与最后一个推入的项目相同的项目。
pushspecification() {
        this.specificationSaveDetailList.push(this.specificationsaveDetail);
    }

这是 plunker 代码:plunker_Code
在这个 plunker 示例中,我从下拉列表中选择项目并提供描述,然后点击添加按钮,表格将填充数组项。
3个回答

7
因为你正在将同一对象及其引用绑定到数组元素上。因此,当你更新specificationsaveDetail对象引用时,它会更新数组的所有元素,因为它们都是同一元素的引用。
要使其正常工作,你需要创建一个新的对象副本并将其推入数组中。为此,你可以使用Object.assign
pushspecification() {
    this.specificationSaveDetailList.push(Object.assign({}, this.specificationsaveDetail));
}

Demo Plunker


@Amir 很高兴知道,谢谢 :) - Pankaj Parkar
今天你可以使用 pushspecification() { this.specificationSaveDetailList.push({...this.specificationsaveDetail}); } - noririco

0

使用以下方法,当您将元素添加到数组中时。

const element: IEmployee[] = []; //initialize the array
element.push(employee);

0
你可以像这样使用:
Array.push(Object.assign({}, this.utility));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接