【问题标题】:Ng-repeat does not seem to create a separate Scope for each item when using array.push()使用 array.push() 时,Ng-repeat 似乎没有为每个项目创建单独的 Scope
【发布时间】:2016-04-12 00:26:45
【问题描述】:

我有以下角度视图:

<div ng-repeat="item in items track by $index">
    <input ng-model="item.name"/>
</div>

在控制器中,我调用一个服务来获取一个新的空项目的 Json 表示,以便我可以使用以下函数将其添加到数组中:

$http.post("/NewItemJson").then(function (response) {
    $scope.newItem = response.data;
});

$scope.addItem = function() {
    $scope.items.push($scope.newItem);
};

但是当我测试视图时,我看到所有通过 addItem() 函数添加的新项目都绑定到同一个范围。我可以这么说,因为如果我更改其中一个输入,所有其他输入都会同时更改:

这很奇怪,因为 ng-repeat 应该为每个项目创建不同的范围。实际上,对于未使用 addItem() 函数添加的数组的所有项目......但在这种情况下不是。我错过了什么?

【问题讨论】:

  • 调用 addItem 的代码在哪里?您是否可能只是添加相同的项目?
  • 我从视图调用函数,使用 ng-click="addItem()"。我添加的项目是空对象......所有 Id 都是空的 Guid。会不会是这个问题?

标签: javascript angularjs ng-repeat


【解决方案1】:

执行addItem() 时不会刷新$scope.newItem,因此您会一遍又一遍地添加相同的项目。试试这个:

$scope.addItem = function() {
    $scope.items.push(angular.copy($scope.newItem));
};

【讨论】:

  • 正确。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2015-07-24
  • 2015-07-07
  • 2015-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多