【问题标题】:For loop through custom filter resultsFor 循环遍历自定义过滤器结果
【发布时间】:2018-04-10 11:54:52
【问题描述】:

我有一个应用程序列表,我有一个自定义过滤器,用于获取指定字段的唯一值。我为这些唯一值中的每一个重复出复选框以过滤表。

我需要使用唯一过滤器返回的值进行循环。这样我就可以有一个按钮来取消选中 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

我能想到的最好的(不起作用的)是......

$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;

        }
    };

【问题讨论】:

    标签: javascript angularjs loops angularjs-filter


    【解决方案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;
    
        }
    };
    

    【讨论】:

    • cat in (uniqueApplications = (applications | unique : 'Category')) 我不知道您可以以这种方式将内容添加到标记级别的列表中!谢谢!
    猜你喜欢
    • 2012-02-05
    • 2015-11-25
    • 2013-09-14
    • 2019-02-18
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    相关资源
    最近更新 更多