单击复选框并调用ng-click:在ng-click生效之前不会更新模型,因此复选框值会错误地显示在UI中:
这在AngularJS 1.0.7中有效,但在Angualar1.2-RCx中似乎失效了。
<div ng-app="myApp" ng-controller="Ctrl">
<li ng-repeat="todo in todos">
<input type='checkbox' ng-click='onCompleteTodo(todo)' ng-model="todo.done">
{{todo.text}}
</li>
<hr>
task: {{todoText}}
<hr><h2>Wrong value</h2>
done: {{doneAfterClick}}
和控制器:
angular.module('myApp', [])
.controller('Ctrl', ['$scope', function($scope) {
$scope.todos=[
{'text': "get milk",
'done': true
},
{'text': "get milk2",
'done': false
}
];
$scope.onCompleteTodo = function(todo) {
console.log("onCompleteTodo -done: " + todo.done + " : " + todo.text);
$scope.doneAfterClick=todo.done;
$scope.todoText = todo.text;
};
}]);
带Angular 1.2 RCx - http://jsfiddle.net/supercobra/ekD3r/的破碎小提琴
Working fidddle w/ Angular 1.0.0 - http://jsfiddle.net/supercobra/8FQNw/
发布于 2014-03-06 02:06:25
正如https://github.com/angular/angular.js/issues/4765中所报道的,从ng-click切换到ng-change似乎可以解决这个问题(我使用的是Angular 1.2.14)
发布于 2013-10-21 23:55:16
你为什么不用
$watch('todo',function(.....
或者另一种解决方案是在ng-click回调中设置todo.done
,并且只使用ng-click
<div ng-app="myApp" ng-controller="Ctrl">
<li ng-repeat="todo in todos">
<input type='checkbox' ng-click='onCompleteTodo(todo)'>
{{todo.text}} {{todo.done}}
和
$scope.onCompleteTodo = function(todo) {
todo.done = !todo.done; //toggle value
console.log("onCompleteTodo -done: " + todo.done + " : " + todo.text);
$scope.current = todo;
}
发布于 2016-08-17 03:38:33
用ng-checked替换ng-model对我来说是可行的。
https://stackoverflow.com/questions/19496821
复制相似问题