嵌套的ng-repeat不会更新对象

时间:2016-02-18 03:03:32

标签: javascript angularjs

我需要为用户预设NxN矩阵输入。因此,我在表对象上使用嵌套的ng-repeat来创建输入。虽然它最初成功填充,但它不会更新对象。

HTML

<div ng-app="myApp" ng-controller="VibrationCtrl">
  <table>
    <tr ng-repeat="Row in Mi">
      <td ng-repeat="I in Row track by $index">
        <input type="text" ng-model="I">
      </td>
    </tr>
  </table>

  {{Mi}}
</div>

JS

var myApp = angular.module('myApp', []);

function VibrationCtrl($scope) {
  $scope.Mi = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
  ];
}

myApp.controller('VibrationCtrl', VibrationCtrl);

的jsfiddle:

https://jsfiddle.net/wLhucx8b/2/

2 个答案:

答案 0 :(得分:2)

ng-model需要引用对象(数组)的实际部分,而不仅仅是值。

ng-model="Row[$index]"

https://jsfiddle.net/wLhucx8b/4/

否则它不会更新实际对象的引用。想象一下,你循环遍历一个数组而你只是修改了值,而不是数组中的引用:

collection.forEach(function (value, index) {
  value = '123'; // this won't actually change the original array
  collection[index] = '123' // this WILL
});

^ ng-repeat其中一个值的ng-model行为相同。

注意:使用<input type="number" ... />,否则您的ng-model值将变为字符串!

答案 1 :(得分:0)

更改

<input type="text" ng-model="I">

<input type="text" ng-model="Row[$index]">

Forked your JSFiddle