【问题标题】:Angularjs pass an array to custom filter as parameterAngularjs 将数组作为参数传递给自定义过滤器
【发布时间】:2021-12-21 18:22:21
【问题描述】:

在像下面这样在 Angularjs 中定义自定义过滤器时,我传入了我想要过滤的数据集和一个数组作为过滤器值:

在数组中传递的切换按钮状态

传入过滤器的参数数组值

如何调用过滤器:

<div class="row" ng-repeat="item in data | filterStats:filters">

自定义过滤器通过过滤 ng-repeat 中的数据集来检查应该应用数组中的哪些值。

   .filter('filterStats', function () {
        return function (items, paramArray) {
        var isFilterEmpty = true;
            angular.forEach(paramArray, function (value, key) {
            if (value == 0) {
                isFilterEmpty = false;
            }
        });

        if(!isFilterEmpty) 
        //More logic
   }
}

问题: 问题是数组参数似乎无法在自定义过滤器中使用 forEach 进行循环。参数数组显示 [Array[0]] 因此看起来是空的。 任何人都可以就此事提供指导吗?可以将数组作为自定义过滤器参数传递吗?我错过了什么?

发送。

【问题讨论】:

    标签: angularjs angularjs-ng-repeat angularjs-filter


    【解决方案1】:

    看起来您可能将filters 定义为一个数组,但是却像一个对象一样使用它。

    你没有在数组中放置任何索引,所以它是空的。通过执行filters.Limited = '-1',这是向数组添加命名属性,但数组的实际长度仍为 0。

    var a = [];
    a.length; // 0
    a.something = '123';
    a.length // still 0
    a[0] = '456';
    a.length; // now 1
    

    相反,如果您将 filters 变量定义为 Object 而不是 Array,我想您的代码将按预期工作。

    $scope.filters = {};

    【讨论】: