2013-03-30 17 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"]; 
}); 

ライブデモのURLは次のとおりです。http://plnkr.co/edit/2QFgRooeFUTgJOo223k9?p=preview

私は理解していない理由を入力コントロールができません編集したり、新しい文字を入力したり、文字を削除することはできません。

答えて

9

これはスコープの継承のためによくある問題です。あなたのnamesのそれぞれは、各namesがある場合は、オブジェクトng-repeatスコープ項目は必ず

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

dot内を使用し、元のオブジェクトへの参照となりますので、ng-repeatが元に接続されていない、それ自身のスコープのアイテムを作る原始的ですng-modelが親指の有用なルールです

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

Working Plunker

角度githでこの記事を読みます詳細explanatonためのUBのwiki:

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> 

注NG-場合に、単一のequals警告またはエラーは発生しませんが、テキストは読み取り専用になります。あなたがすぐに読んでいるならば、はるかに難しいものです。当然の

それは次のようになります。

<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

関連する問題