angularjs 复选框 ng-checked 不工作
angularjs checkbox ng-checked not working
我有以下代码:-
<!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>
如果我 select Mary 或 Jane,我可以正确地看到他们购物篮中的正确商品已被选中。但是,如果我手动检查所有水果,然后查看 Mary 或 Jane,它不会排除不在他们篮子中的物品。为什么 ng-checked 失败了?
额外的问题,假设我什么都不想要作为默认值,将 selectedBasket 设置为 null 并在指令中检查 null 是否是最佳做法,是否有更好的方法?
您的复选框中没有 ng-model,因此您的手动操作未在任何地方注册。
ng-checked 仅用于制作一个 'slave' 复选框,它不能采取任何手动操作。
我的猜测是您应该使用初始化为您的 ng-check 值的 ng-model 而不是使用 ng-checked。
如果你想保持你的 ng-checked 你可以做的是:
<input type="checkbox" ng-click="selectedBasket.items.push(f)" ng-checked="selectedBasket !== null && selectedBasket.items.indexOf(f) !== -1">
其实还是不对。。。一定是累了,在你的ng-click中使用toogle功能,添加或删除项目应该更好......
遇到了与 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);
}
我有以下代码:-
<!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>
如果我 select Mary 或 Jane,我可以正确地看到他们购物篮中的正确商品已被选中。但是,如果我手动检查所有水果,然后查看 Mary 或 Jane,它不会排除不在他们篮子中的物品。为什么 ng-checked 失败了?
额外的问题,假设我什么都不想要作为默认值,将 selectedBasket 设置为 null 并在指令中检查 null 是否是最佳做法,是否有更好的方法?
您的复选框中没有 ng-model,因此您的手动操作未在任何地方注册。
ng-checked 仅用于制作一个 'slave' 复选框,它不能采取任何手动操作。
我的猜测是您应该使用初始化为您的 ng-check 值的 ng-model 而不是使用 ng-checked。
如果你想保持你的 ng-checked 你可以做的是:
<input type="checkbox" ng-click="selectedBasket.items.push(f)" ng-checked="selectedBasket !== null && selectedBasket.items.indexOf(f) !== -1">
其实还是不对。。。一定是累了,在你的ng-click中使用toogle功能,添加或删除项目应该更好......
遇到了与 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);
}