我有以下代码: -
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js"></script>
</head>
<body ng-app="app" ng-controller="ctrl" ng-init="init()">
<div class="container" style="width:400px">
<div class="panel panel-default">
<div class="panel-body">
<form>
<div class="form-group">
<label for="selectedBasket">Select basket :</label>
<select id="selectedBasket" class="form-control" ng-model="selectedBasket" ng-options="b.name for b in baskets">
</select>
</div>
<div ng-repeat="f in fruits" class="checkbox">
<label>
<input type="checkbox" value="" ng-checked="selectedBasket !== null && selectedBasket.items.indexOf(f) !== -1">
{{ f }}
</label>
</div>
</form>
</div>
</div>
</div>
<script>
var app = angular.module('app', []);
app.controller('ctrl', function($scope) {
$scope.init = function() {
$scope.baskets = [{'name': 'mary', 'items': ['apple', 'orange']}, {'name': 'jane', 'items': ['banana']}];
$scope.fruits = ['apple', 'banana', 'cherry', 'orange', 'watermelon'];
$scope.selectedBasket = null;
};
});
</script>
</body>
</html>
如果我选择Mary或Jane,我可以正确地看到他们检查篮子里的正确物品。但是,如果我手动检查所有水果,然后查看玛丽或简,它不会排除不在其篮子中的项目。为什么ng-checked失败?
奖金问题,最好的做法是将selectedBasket设置为null并在指令中检查null,假设我不想作为默认值,是否有更好的方法?
答案 0 :(得分:1)
您的复选框中没有ng-model,因此您的手动操作未在任何地方注册 ng-checked仅用于制作“奴隶”复选框,不需要手动操作。 我的猜测是你应该使用初始化为ng-check值的ng-model而不是使用ng-checked。
如果你想保持你的ng检查你可以做的是:
<input type="checkbox" ng-click="selectedBasket.items.push(f)" ng-checked="selectedBasket !== null && selectedBasket.items.indexOf(f) !== -1">
实际上它仍然是错的...必须累,在你的ng-click中使用toogle功能添加或删除项目应该更好...
答案 1 :(得分:0)
与ng-check有同样的问题,尝试了一切,但没有任何效果。我想在点击2时控制已检查项目的数量,因此我使用了通过ng-click发送的$ Event并禁用它。
以下是示例代码:
<input type="checkbox" ng-click="toggleCheck($event, product._id);"
ng-checked="isChecked(product._id)">
$scope.toggleCheck($event, productId){
if ( $scope.featuredProducts.indexOf(productId) === -1) {
if ($scope.featuredProducts.length < 2) {
$scope.featuredProducts.push(productId);
}else {
$event.preventDefault();
$event.stopPropagation();
}
} else {
$scope.featuredProducts.splice( $scope.featuredProducts.indexOf(productId), 1);
}
}
$scope.isChecked(productId){
return ($scope.featuredProducts.indexOf(productId) !== -1);
}