10

モデルにアイテムを追加するときに、ng-listを使用した入力が更新されないという奇妙な問題が発生しています。問題をよりよく説明するためにフィドルを作成しました:http://jsfiddle.net/rtZY3/

// Doesn't update ng-list input
$scope.tags.push(tag);

// Does update ng-list input
var tags = angular.copy($scope.tags);
tags.push(tag);
$scope.tags = tags;

これは、特に上記のjsFiddle$scope.tagsのタグで示されているように適切に更新されているため、予期された動作とは思えません。<pre>

4

1 に答える 1

15

わかりました、これは面白かったです。ngList ディレクティブの縮小されていない AngularJS ソース コードを掘り下げました。

最初の例は、入力フィールドに表示されるカンマ区切りの文字列に配列値を分割する関数であるフォーマッタ関数をトリガーしないようです。

さらに調査すると、エラーは ngModel ディレクティブのcontrollerにあることがわかります。フォーマッタは、値が以前の値と厳密に等しくない場合にのみ呼び出されますが、最初の例では同じ配列インスタンスであるため、そのステートメントは false と評価されるため、テキスト フィールドは更新されません。ソースコードを参照してください

$scope.$watch(function ngModelWatch() {
    var value = ngModelGet($scope);

    // $modelValue and value is the same array instance in your first example
    if (ctrl.$modelValue !== value) {
        // ...
    }
});

2 番目の例では、毎回新しい配列インスタンスを作成するため、フォーマッタが実行されます。

于 2013-03-23T19:54:35.197 に答える