在ng-repeat函数AngularJs中更改整个对象

时间:2016-09-21 10:52:13

标签: javascript angularjs

您好我对Angularand函数的ng-repeat有更改值的问题。 我有这个ng-repeat循环一个ObjectArray并有一个重置值的按钮。

<div ng-repeat="element in data.elements">
   <button ng-click="reset(element)" >reset</button>
</div>

其中data.elements是对象数组示例:

[{id:1, name:"element1"},{id:2, name : "element2"}];

Controller我设置$scope中的函数Reset,它应该传递一个传递给默认对象的对象的副本:

$scope.reset = function(el){
  $scope.defaultObject = {id:500, name:"default"};
  el = angular.copy($scope.defaultObject);
}

但不起作用,但如果我这样做:

$scope.reset = function(el){
      $scope.defaultObject = {id:500, name:"default"};
      el.name = $scope.defaultObject.name;
    }

有效。 我这样做(在这个例子中):

el = angular.copy($scope.defaultObject);

对象el等于对象$scope.defaultObject我的问题是,我可以复制整个对象而不循环所有属性吗?

2 个答案:

答案 0 :(得分:0)

你是说,你的更新对象没有反映在用户界面上?您可以在分配对象后运行$scope.$apply()来尝试强制更新范围。

答案 1 :(得分:0)

您正在将对象传递给重置功能,然后您将覆盖此对象。就是这样,没有任何反应,因为它不会影响data.elements数组中的原始对象。

您需要使用不同的方法。按索引跟踪元素:

<div ng-repeat="element in data.elements track by index">
     <button ng-click="reset(index)" >reset</button>
</div>

...然后修改data.elements[index]

$scope.reset = function(index){
  $scope.data.elements[index] = {id:500, name:"default"};
}