Angularjs表格单元迭代

Angularjs表格单元迭代,angularjs,Angularjs,我觉得我做错了什么,但这种行为似乎很奇怪。我根据控制器中的数据动态创建一个表。当我在表格中的一个单元格中输入一个字符时,它会立即将焦点更改为下一个单元格,并将该字符添加到该单元格中 我有一个非常简单的例子,在JSFIDLE中重现了这个问题 是什么导致了这种奇怪的行为?好的,我发现了问题。这篇文章增加了一些清晰度 当ngRepeat展开时,它将原语复制到项下的本地范围。然后ng模型绑定到它。更新模型时,更新的是副本,而不是原始副本。但当您更新原始模型时,中继器会意识到items数组中发生了更改

我觉得我做错了什么,但这种行为似乎很奇怪。我根据控制器中的数据动态创建一个表。当我在表格中的一个单元格中输入一个字符时,它会立即将焦点更改为下一个单元格,并将该字符添加到该单元格中

我有一个非常简单的例子,在JSFIDLE中重现了这个问题


是什么导致了这种奇怪的行为?

好的,我发现了问题。这篇文章增加了一些清晰度

当ngRepeat展开时,它将原语复制到项下的本地范围。然后ng模型绑定到它。更新模型时,更新的是副本,而不是原始副本。但当您更新原始模型时,中继器会意识到items数组中发生了更改,然后它会重新创建ng模型,这意味着它会重新复制到items。因此出现了奇怪的行为,但这是意料之中的

简短回答:永远不要在ngRepeat中迭代和输入绑定到原语,因为您是在复制值而不是引用,任何更新都写入本地范围而不是原始位置

我更新了小提琴,现在可以用了

 <div ng-app="miniapp">
<div ng-controller="Matrix">
    <h1>Enter a value in the fist cell.</h1>
   <table>
<thead>
    <tr>
        <th>Row Name</th>
        <th>0</th>
        <th>1</th>
        <th>2</th>
        <th>3</th>
        <th>4</th>
        <th>5</th>
    </tr>
</thead>
<tbody>
    <tr ng-repeat="(row, values) in valueMap">
        <td>{{row}}</td>
        <td ng-repeat="(col, val) in values" ><input type="text" ng-model="valueMap[row][col]"></input></td>
    </tr>

</tbody>
</table>                      
</div>    
 </div>​
 var app = angular.module('miniapp', []);

 function Matrix($scope) {
$scope.valueMap = {
    aRow: {
        '0': '',
        '1': '',
        '2': '',
        '3': '',
        '4': '',
        '5': ''
    }
   };
 }​