这是一个奇怪的问题。代码很简单:
HTML code:
<body ng-controller="MainCtrl">
<ul ng-repeat="name in names">
<input type="text" ng-model="name" />
</ul>
</body>
角度代码:
app.controller('MainCtrl', function($scope) {
$scope.names = ["aaa","bbb","ccc"];
});
现场演示网址为:http://plnkr.co/edit/2QFgRooeFUTgJOo223k9?p=preview
我不明白为什么输入控件无法编辑,我无法输入新字符或删除字符。
答案 0 :(得分:9)
由于范围继承,这是一个常见问题。您的names
中的每一个都是原语,因此ng-repeat
使其自己的范围项与原始范围无关,但如果每个names
都是对象ng-repeat
,则范围项将是对原始对象的引用
[{name:"aaa"},{name:"bbb"},{name:"ccc"}];
始终在dot
使用ng-model
是一条有用的经验法则
<div ng-repeat="item in names">
<input type="text" ng-model="item.name"/>
</div>
阅读本文关于angular github wiki的详细解释:
https://github.com/angular/angular.js/wiki/The-Nuances-of-Scope-Prototypal-Inheritance
答案 1 :(得分:3)
Angular'固定'这个在1.1跟踪跟踪$ index。无需更改模型。
<div ng-repeat="item in names track by $index">
<input type="text" ng-model="names[$index]" />
</div>
答案 2 :(得分:0)
迟到的答案,但是你也应该小心打字错误,这个角度不会警告你:
<div ng-repeat="item in names track by $index" ng=if="names[$index] = 'John'">
<input type="text" ng-model="names[$index]" />
</div>
注意ng-if中的单个等于,不会引起警告或错误,但文本也是只读的。如果你正在快速阅读,那么相当难以发现。
当然应该是:
<div ng-repeat="item in names track by $index" ng-if="names[$index] == 'John'">
<input type="text" ng-model="names[$index]" />
</div>