我有一个应用程序列表,我有一个自定义过滤器,用于获取指定字段的唯一值。我会重复这些唯一值的复选框以过滤表格。
我需要使用唯一过滤器返回的值进行循环。这样我就可以使用一个按钮来取消选中ng-repeat中返回的所有复选框。
我有它工作,但它循环遍历所有表值(数千)而不仅仅是唯一值。
标记:
<div ng-repeat="cat in applications | unique : 'Category'">
<label>
<input name="abc" type="checkbox" ng-model="$parent.FCategory[cat.Category]" ng-value="cat" ng-init="$parent.FCategory[cat.Category]=true">{{ cat.Category }}
</label>
</div>
<input type="button" ng-click="uncheckAll()">Untick
JS,独特过滤器:
App.filter('unique', function () {
return function (collection, keyname)
{
var output = [],
keys = [];
angular.forEach(collection, function (item) {
var key = item[keyname];
if (keys.indexOf(key) === -1) {
keys.push(key);
output.push(item);
}
});
return output;
};
});
JS,取消选中所有功能:
$scope.uncheckAll = function () {
for (var i = 0; i < $scope.applications.length; i++) {
var item = $scope.applications[i].Category;
$scope.FCategory[item] = false;
}
};
问题是'for(var i = 0; i&lt; $ scope.applications.length; i ++){'为每条记录循环,我无法弄清楚如何使用'$ scope.applications.length '只针对独特的过滤结果。
我能想到的最好的(不起作用)是......
$scope.uncheckAll = function () {
var a = $scope.applications;
for (var i = 0; i < $filter('unique')(a,'Category').length; i++) {
var item = $scope.applications[i].Category;
$scope.FCategory[item] = false;
}
};
答案 0 :(得分:1)
解决此问题的一种方法是将过滤后的结果存储在新的范围变量(uniqueApplications)中,然后将其传递到uncheckAll函数中:
<div ng-repeat="cat in (uniqueApplications = (applications | unique : 'Category'))">
<label>
<input name="abc" type="checkbox" ng-model="$parent.FCategory[cat.Category]" ng-value="cat" ng-init="$parent.FCategory[cat.Category]=true">{{ cat.Category }}
</label>
</div>
<input type="button" ng-click="uncheckAll(uniqueApplications)">
您还需要修改uncheckAll函数:
$scope.uncheckAll = function (list) {
for (var i = 0; i < list.length; i++) {
var item = list[i].Category;
$scope.FCategory[item] = false;
}
};