为什么ng模型没有更新
Why is ng-model not updating?
我正在尝试用输入[type=checkbox]做一个简单的angularJS测试,并显示所选项目的数量。目前,我的解决方案如下:
控制器:
$scope.items = [{
id: 1,
title: 'item1',
selected: true
},{
id: 2,
title: 'item2',
selected: false
},{
id: 3,
title: 'item3',
selected: false
},{
id: 4,
title: 'item4',
selected: false
}]
$scope.$watchCollection('items', function() {
var no = 0;
for(var i = 0; i < $scope.items.length; i++) {
if($scope.items[i].selected === true)
no++;
}
$scope.noSelectedItems = no;
}
视图:
<div>Items ({{ noSelectedItems }})</div>
<div ng-repeat="item in items">
<input id="{{ item.id }}"
type="checkbox"
ng-model="item.selected"
ng-checked="item.selected" />
<label for="{{ item.id }}" >{{ item.title }}</label>
</div>
初始化是有效的,所以我得到了"Items(1)",但当我选择更多的项时,$scope.Items根本不会更新。
有人能解释一下原因吗?
谢谢。
您需要在集合中使用$watch中的第三个参数(true)进行深度监视。请参阅正在工作的JSFiddle:http://jsfiddle.net/syv8cww1/
$scope.$watch('items', function() {
var no = 0;
for(var i = 0; i < $scope.items.length; i++) {
if($scope.items[i].selected === true)
no++;
}
$scope.noSelectedItems = no;
}, true);
$watchCollection
的设计目的不是监视对象数组中对象内部的更新。有关更多信息,请参阅官方文档。
您可以使用ngChange
指令来解决问题。
HTML:
<div ng-repeat="item in items">
<input id="{{ item.id }}"
type="checkbox"
ng-model="item.selected"
ng-checked="item.selected"
ng-change="doSomething()"/>
</div>
控制器:
$scope.doSomething = function() {
var no = 0;
for(var i = 0; i < $scope.items.length; i++) {
if($scope.items[i].selected === true) {
no++;
}
}
$scope.noSelectedItems = no;
}
相关文章:
- 视图ngValue-Angular JS中未更新模型的更改
- 需要使用触摸屏从 AngularJS 指令中更新模型
- 角度指令没有更新模型视图
- 复选框仅在第二次单击后更新模型
- Angular.js-Socket.io事件更新模型,而不是视图
- UI Select在删除后不会更新模型
- 为什么ng提交没有提交和更新模型
- AngularJS-基于URL更新模型
- 视图更改时,Ember.js更新模型
- Knockoutjs函数更新模型时应出现异常
- 挖空绑定不会更新模型
- 范围不更新模型中的更改
- 导航时更新模型变量
- 角度.js更新模型
- Ember.js不更新模型
- 在使用挖空自定义绑定时更新模型时更新元素
- 在自我更新时以ng重复更新模型
- 如何在主干中对列表进行排序时更新模型的顺序属性
- AngularJS 复选框不更新模型
- 更新模型中的数据不会绑定到控制器