2013-03-30 20 views
9

Bu garip bir sorundur. kod basittir:Angular.JS: neden girişler düzenlenemiyor?

HTML kodu:

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

Eğik kodu:

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

canlı tanıtım url: http://plnkr.co/edit/2QFgRooeFUTgJOo223k9?p=preview

anlamıyorum neden giriş kontrolleri olamaz düzenlenebilir, yeni karakterler yazamaz veya karakterleri silemiyorum.

cevap

9

Bu, kapsam kalıtımı nedeniyle yaygın bir sorundur. senin names her her names ise ancak bir nesne ng-repeat kapsam madde daima

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

bir dot kullanmak orijinal nesneye bir referans olacak, bu yüzden ng-repeat orijinal bağlı değildir, bu kendi kapsamı öğeyi kılan bir ilkel ng-model

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

Working Plunker

açısal gith ilgili bu makaleyi okuyun başparmak yararlı kuraldır Ayrıntılı açıklanması, için ub wiki:

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

3

Eğik $ endeksine göre parça ile 1.1 bu 'sabit'. Modelinizi değiştirmenize gerek yok.

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

Plunker here

0

Geç cevap, ama aynı zamanda açısal konusunda uyarmak olmaz, yazım hataları dikkatli olmalıdır: Giriş

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

Not tek eşittir olduğunu, ng-eğer bir uyarı veya hataya neden olmaz, ancak metin de okunur. Çabuk okuyorsanız zor bir yer. Elbette

olmalıdır: En düzeltme düzeltmesi eksik

<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 iyi nokta, düzeltildi! – PeterS