我有一个复选框列表。每当我点击一个复选框时,我想调用一个函数,具体取决于它是选中还是未选中。这是使用ng-change
与此同时,我还有ng-checked
,可帮助我使用按钮取消选中复选框。
以下是实施:
<md-checkbox md-no-ink="true" ng-checked="selected.indexOf(brand) > -1" ng-change="value?add(brand):remove(brand)" ng-model="value" ng-repeat="brand in brands">
{{brand}}
</md-checkbox>
<md-button ng-click="fun('Spice')">Uncheck</md-button>
控制器代码如下:
$scope.brands = ['Apple','Samsung','Motorolla','Nokia','Micromax','Spice'];
$scope.value = false;
$scope.selected = [];
$scope.fun = function(x){
console.log("Unchecking "+x);
}
$scope.add = function(x){
$scope.selected.push(x);
}
$scope.remove = function(x){
var index = $scope.selected.indexOf(x);
$scope.selected.splice(index,1);
}
Stackovrflow上有一个类似的问题,但它在复选框上有关于缺少ng-model的问题。我在这里添加了ng-model
。
为什么这不起作用?我做错了什么?
答案 0 :(得分:4)
请注意,此指令不应与ngModel一起使用 这可能会导致意外行为。
您应该决定是使用ng-model
还是ng-checked
。不幸的是,目前无法在ng-checked
指令(see this bug)上使用md-checkbox
。所以你必须使用ng-model
。以下代码可以帮助您。
<强> HTML 强>
<md-checkbox md-no-ink="true" ng-model="selected[$index]" ng-repeat="brand in brands track by $index">
{{brand}}
</md-checkbox>
Is Samsung selected: {{isSelected('Samsung')}}
<强> JS 强>
$scope.brands = ['Apple','Samsung','Motorolla','Nokia','Micromax','Spice'];
$scope.selected = [];
$scope.isSelected = function(brand) {
var brandIndex = $scope.brands.indexOf(brand);
return $scope.selected[brandIndex]
};
请注意,每个复选框都需要自己的型号。在您使用$scope.value
作为所有复选框的单一模型之前 - 在这种情况下,它们将被一次性检查/取消选中。
我相信上面的代码就是你要找的。如果我错过了这一点,请随意发表评论。