Angular.JS:为什么不能编辑输入?

时间:2013-03-30 15:42:19

标签: angularjs

这是一个奇怪的问题。代码很简单:

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

我不明白为什么输入控件无法编辑,我无法输入新字符或删除字符。

3 个答案:

答案 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>

Working Plunker

阅读本文关于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>

Plunker here

答案 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>