简单检查在 AngularJS 中全部无效
Simple check all not working in AngularJS
我正在尝试为我的待办事项列表添加一个全部检查,但是一旦我点击 toggleAll()
它会立即取消选中,而且它会取消选中已经选中的那个。
我真的不明白为什么会出现这种情况,也许页面中的其他一些东西正在干扰。我在这里包含的一个简单版本在这个 jsfiddle http://jsfiddle.net/TKVH6/487/ 中并且它正在工作。
<section id="main">
<input id="toggle-all" type="checkbox" ng-model="checkAll" ng-click="toggleAll()">
<label for="toggle-all">Mark all as complete</label>
<ul id="todo-list">
<li ng-repeat="todo in todos" ng-class="{'completed': todo.isCompleted=='true'}" class="editing">
<div class="view" >
<input class="toggle" type="checkbox" ng-click="complete(todo)" ng-model="todo.isCompleted" ng-checked="todo.isCompleted" ng-true-value="'true'" ng-false-value="'false'">
<label ng-hide="isEditing" ng-dblclick="isEditing = !isEditing">{{todo.title}}</label>
<button class="destroy" ng-click="remove(todo)"></button>
</div>
<input class="edit" ng-show="isEditing" ng-model="todo.title" ng-blur="isEditing = !isEditing;edit(todo);">
</li>
</ul>
</section>
控制器
$scope.toggleAll = function () {
if ($scope.selectedAll) {
$scope.selectedAll = true;
} else {
$scope.selectedAll = false;
}
angular.forEach($scope.todos, function (todo) {
todo.isCompleted = $scope.selectedAll;
});
};
编辑 1
$scope.toggleAll = function() {
for(i in $scope.todos) {
$scope.todos[i].isCompleted = $scope.checkAll;
}
};
感谢任何帮助。
已解决!将布尔值视为字符串解决了它。那是因为服务器将布尔值保存为字符串。
$scope.toggleAll = function() {
for(i in $scope.todos) {
$scope.todos[i].isCompleted = "" + $scope.checkAll;
}
};
此时 ng-checked="{{todo.isCompleted}}
需要返回,因为它不是布尔值。
我正在尝试为我的待办事项列表添加一个全部检查,但是一旦我点击 toggleAll()
它会立即取消选中,而且它会取消选中已经选中的那个。
我真的不明白为什么会出现这种情况,也许页面中的其他一些东西正在干扰。我在这里包含的一个简单版本在这个 jsfiddle http://jsfiddle.net/TKVH6/487/ 中并且它正在工作。
<section id="main">
<input id="toggle-all" type="checkbox" ng-model="checkAll" ng-click="toggleAll()">
<label for="toggle-all">Mark all as complete</label>
<ul id="todo-list">
<li ng-repeat="todo in todos" ng-class="{'completed': todo.isCompleted=='true'}" class="editing">
<div class="view" >
<input class="toggle" type="checkbox" ng-click="complete(todo)" ng-model="todo.isCompleted" ng-checked="todo.isCompleted" ng-true-value="'true'" ng-false-value="'false'">
<label ng-hide="isEditing" ng-dblclick="isEditing = !isEditing">{{todo.title}}</label>
<button class="destroy" ng-click="remove(todo)"></button>
</div>
<input class="edit" ng-show="isEditing" ng-model="todo.title" ng-blur="isEditing = !isEditing;edit(todo);">
</li>
</ul>
</section>
控制器
$scope.toggleAll = function () {
if ($scope.selectedAll) {
$scope.selectedAll = true;
} else {
$scope.selectedAll = false;
}
angular.forEach($scope.todos, function (todo) {
todo.isCompleted = $scope.selectedAll;
});
};
编辑 1
$scope.toggleAll = function() {
for(i in $scope.todos) {
$scope.todos[i].isCompleted = $scope.checkAll;
}
};
感谢任何帮助。
已解决!将布尔值视为字符串解决了它。那是因为服务器将布尔值保存为字符串。
$scope.toggleAll = function() {
for(i in $scope.todos) {
$scope.todos[i].isCompleted = "" + $scope.checkAll;
}
};
此时 ng-checked="{{todo.isCompleted}}
需要返回,因为它不是布尔值。