我遇到一个奇怪的问题,在向模型添加项目时,使用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) { // ... } });
在第二个例子中,您每次都创建一个新的数组实例,因此运行格式化程序.