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 指令的控制器。仅当值严格不等于前一个值时才调用格式化程序,但由于它与第一个示例中的数组实例相同,因此该语句的计算结果为 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) {
        // ...
    }
});

在您的第二个示例中,您每次都创建一个新的数组实例,因此运行格式化程序。

于 2013-03-23T19:54:35.197 回答