2013-03-30 3 views
9

Это странная проблема. Код прост:Angular.JS: почему нельзя редактировать входы?

HTML код:

<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

Я не понимаю, почему контроль ввода не может редактироваться, я не могу вводить новые символы или удалять символы.

ответ

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

Читать эту статью на угловой гите UB вики для детального explanaton:

https://github.com/angular/angular.js/wiki/The-Nuances-of-Scope-Prototypal-Inheritance

3

Угловая 'фиксированных' это в 1,1 с дорожкой по $ индекса. Не нужно менять свою модель.

<div ng-repeat="item in names track by $index"> 
    <input type="text" ng-model="names[$index]" /> 
</div> 

Plunker here

0

поздний ответ, но вы также должны быть осторожны, опечаток, что угловой не будет предупреждать вас о:

<div ng-repeat="item in names track by $index" ng=if="names[$index] = 'John'"> 
    <input type="text" ng-model="names[$index]" /> 
</div> 

Обратите внимание на одинарные равных в нг-если, не будет вызывать предупреждения или ошибки, но текст также будет доступен только для чтения. Довольно трудно найти, если вы читаете быстро.

Это, конечно, должно быть:

<div ng-repeat="item in names track by $index" ng-if="names[$index] == 'John'"> 
    <input type="text" ng-model="names[$index]" /> 
</div> 
+0

ваша коррекция отсутствует коррекция. =] – sonicblis

+0

@sonicblis хорошее место, исправлено! – PeterS

Смежные вопросы