2013-03-23 71 views
10

我遇到了一個奇怪的問題,那就是當向模型添加項目時,使用ng-list的輸入沒有更新。我創建了一個小提琴,以更好地說明這個問題:http://jsfiddle.net/rtZY3/當添加項目到數組時,ng-list輸入沒有更新

// 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; 

這似乎並不像預期的行爲,尤其是因爲$scope.tags<pre>標籤中的jsfiddle說明上述被正確地更新。

+1

如果@Martin已經解決了這個問題,您應該將其標記爲答案。 – Jess 2013-03-23 21:21:44

回答

15

好的,所以這很有趣。我深入研究了未分類的AngularJS源代碼ngList directive

這似乎是第一個例子不會觸發格式化函數,該函數將數組值分割爲顯示在輸入字段中的逗號分隔字符串。

進一步的調查顯示,錯誤在於ngModel指令的controller。格式化程序只在值嚴格不等於先前值時被調用,但由於它與第一個示例中的數組實例相同,因此該語句的計算結果爲false,因此文本字段未更新。 See the source code

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

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

在第二個示例中,您每次都創建一個新的數組實例,因此運行了格式化程序。

+1

呵呵,那確實很有趣;感謝您的調查!我想我會堅持我的第二個例子。 – 2013-03-24 02:23:13

相關問題