2013-03-30 13 views
9

To jest dziwny problem. Kod jest prosty:Angular.JS: dlaczego nie można edytować danych wejściowych?

HTML kod:

<body ng-controller="MainCtrl"> 
    <ul ng-repeat="name in names"> 
    <input type="text" ng-model="name" /> 
    </ul> 
</body> 

kod kątowa:

app.controller('MainCtrl', function($scope) { 
    $scope.names = ["aaa","bbb","ccc"]; 
}); 

live url demo: http://plnkr.co/edit/2QFgRooeFUTgJOo223k9?p=preview

Nie rozumiem, dlaczego sterowanie wejściowe nie może być edytowane, nie mogę wpisywać nowych znaków ani usuwać znaków.

Odpowiedz

9

Jest to typowy problem związany z dziedziczeniem zakresu. Każdy z twojej names jest prymitywny tak ng-repeat czyni własną pozycję zakresu, który nie jest podłączony do oryginału, jednak jeśli każdy names jest obiektem ng-repeat poz zakres będzie odwołanie do oryginalnego obiektu

[{name:"aaa"},{name:"bbb"},{name:"ccc"}]; 

Zawsze używaj dot w ng-model jest jako zasada

<div ng-repeat="item in names"> 
     <input type="text" ng-model="item.name"/> 
    </div> 

Working Plunker

Przeczytaj ten artykuł na kątowym Gith ub wiki szczegółowe explanaton:

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

3

kątowa 'stałe' to w 1.1 z toru przez $ index. Nie musisz zmieniać swojego modelu.

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

Plunker here

0

Późne odpowiedź, ale należy również uważać na literówki, że kątowa nie ostrzega o:

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

Uwaga pojedynczych równych w ng-czy, że nie spowoduje ostrzeżenia lub błędu, ale tekst będzie również tylko do odczytu. Całkiem trudno zauważyć, jeśli czytasz szybko.

To oczywiście powinno być:

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

Twój korekta brakuje korekty. =] – sonicblis

+0

@sonicblis dobre miejsce, poprawione! – PeterS

Powiązane problemy