繁体   English   中英

过滤功能的参数

[英]Parameters for filter function

在AngularJS中,如何将参数传递给自定义过滤器函数? 在这种情况下,我需要taskstatus在过滤器功能中均可用。

但是Angular只注入task 如何添加status

HTML

<div ng-repeat="status in statuses">
    Selected Status: {{ status.title }
    <ul>
        <li ng-repeat="task in tasks | filter:customFilter">
            Task Status: {{ task.status }
        </li>
    </ul>
</div>

JS

$scope.customFilter = function( task, status ) 
{
    // use task and status to show only those tasks that have the selected status
};

我尝试了<li ng-repeat="task in tasks | filter:customFilter( task, status )">但这没有用。

要将多个参数传递到过滤器中,只需用冒号将它们分开。 如果使用过滤器功能,则只需将现有过滤器功能包装在自定义过滤器中。

app.filter('customFilterName', ['$filter', function ($filter) {
    var standardFilter = $filter('filter');
    return function (tasks, status) {
        return standardFilter(tasks, function (task) {
            // use task and status to show only those tasks that have the selected status
        });
    };
}]);

第一行是过滤器工厂功能的定义。 第二行加载标准过滤器过滤器(我知道这是愚蠢的命名)。 第三行是我们创建的实际过滤器函数的定义,在第四行中,我们包装了现有过滤器以处理我们的输入。

从表面上看这有点复杂,但是使用自定义命名的过滤器和参数会使视图更易读,并且摆脱了将对象指定为参数所带来的许多重复步骤。

在您看来:

<div ng-repeat="status in statuses">
    Status = {{ status.title }
    <ul>
        <li ng-repeat="task in tasks | customFilterName:status">
        </li>
    </ul>
</div>

编辑:我最初说的是-您不必一定要用$ filter包装函数-它应该可以按原样工作。 要获取外部范围,请使用$parent -这是不正确的。 父作用域应该可以在第二个ng-repeat中访问。 另外,要传递多个参数,应调用angular的本机filter ,如先前的回答所述。

app.filter('realFilter', function(){
   return function(itemArray, param){
   var filteredList=[];
   console.log(param);
   for (var i in itemArray){
       if (itemArray[i].statum == param){
           filteredList.push(itemArray[i]);
       }
   }
   return filteredList;
   }
})

HTML:

<li ng-repeat="task in tasks | realFilter:status.status">
    Task Status: {{ task.statum }}
</li>

这是the子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM