Angularjs 将项目添加到数组中似乎会中断重复

Angularjs 将项目添加到数组中似乎会中断重复,angularjs,angularjs-ng-repeat,Angularjs,Angularjs Ng Repeat,我有一个使用ngRepeat显示的数组,底部有一个表单,可以添加到所述数组中。这用于在早期版本的angular中工作;ngRepeat中跟踪项目的方式在angular的较新版本中发生了变化,因此我还不确定这是否是一个大问题,但当我将项目推送到数组时,所有项目似乎都绑定到同一个模型 以下是我添加项目的方式: var vm = this; this.items = []; this.addItem = function(item) { vm.items.push(item); } 我像

我有一个使用ngRepeat显示的数组,底部有一个表单,可以添加到所述数组中。这用于在早期版本的angular中工作;ngRepeat中跟踪项目的方式在angular的较新版本中发生了变化,因此我还不确定这是否是一个大问题,但当我将项目推送到数组时,所有项目似乎都绑定到同一个模型

以下是我添加项目的方式:

var vm = this;

this.items = [];

this.addItem = function(item) {
    vm.items.push(item);
}
我像这样绕着他们转:

<ul>
    <li ng-repeat="item in main.items track by $index">{{item.id}} - {{item.value}}</li>
</ul>
<hr>
<input ng-model="main.newItem.id" type="text" placeholder="id">
<input ng-model="main.newItem.value" type="text" placeholder="value">
<button ng-click="main.addItem(main.newItem)">Add Item</button>
  • {{item.id}-{{item.value}

添加项
下面是一个演示问题的示例。

用户回答

在将项目添加到数组之前,需要创建项目的副本

vm.items.push(angular.copy(item));

这很正常:
newItem
总是同一个对象。只需在
addItem
函数中复制它,例如使用
vm.items.push(angular.copy(item))是的,这就解决了。谢谢你有没有在你的控制器里声明过新项目?您正在引用一个main.newItem,但我没有看到它被声明。没有声明它,没有必要声明它。有趣的是,我不知道。谢谢