入力が編集不可/読み取り専用である理由を誰かに説明できますか? 設計によるものである場合、その背後にある理論的根拠は何ですか?
Angular 1.0.3 の時点で、これは設計によるものです。Artem は、「各 ng-repeat アイテムに直接バインドする」場合に 1.0.3+ がどのように機能するかについて非常に適切に説明しています。つまり、
<div ng-repeat="num in myNumbers">
<input type="text" ng-model="num">
ページが最初にレンダリングされるときのスコープの図を次に示します (配列要素の 1 つを削除したため、図のボックスが少なくなります)。
(拡大するにはクリックしてください)
破線は、プロトタイプのスコープ継承を示しています。
灰色の線は、子→親の関係 (つまり、何を$parent
参照しているか) を示しています。
茶色の線は $$nextSibling を示しています。
灰色のボックスはプリミティブ値です。青いボックスは配列です。紫はオブジェクトです。
あなたがコメントで参照したSOの答えは、1.0.3が出る前に書かれたことに注意してください。1.0.3 より前ではnum
、テキスト ボックスに入力すると、ngRepeat 子スコープの値が実際に変更されていました。(これらの値は親スコープでは表示されません。) 1.0.3 以降、ngRepeatはダイジェスト サイクル中にnum
ngRepeat スコープの値を親/MainCtrl スコープの配列からの (変更されていない) 値に置き換えるようになりました。myNumbers
これにより、基本的に入力が編集できなくなります。
修正は、MainCtrl でオブジェクトの配列を使用することです。
$scope.myNumbers = [ {value: 10}, {value: 20} ];
value
次に、ngRepeat でオブジェクトのプロパティにバインドします。
<div ng-repeat="num in myNumbers">
<input type="text" ng-model="num.value">
<div>current scope: {{num.value}}</div>