在向数组添加项目时,javascript – ng-list输入不更新

前端之家收集整理的这篇文章主要介绍了在向数组添加项目时,javascript – ng-list输入不更新前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我遇到一个奇怪的问题,在向模型添加项目时,使用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;

这似乎并不像预期的行为,特别是因为$scope.tags被正确地更新,如< pre>标签在上面的jsFiddle.

解决方法

好的,所以这很有趣.我挖掘了 ngList directive的未定义的AngularJS源代码.

似乎第一个例子不会触发格式化函数,这是将数组值分解成输入字段中显示的逗号分隔字符串的函数.

进一步的调查显示,错误在于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) {
        // ...
    }
});

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

猜你在找的JavaScript相关文章