[英]Parameters for filter function
在AngularJS中,如何将参数传递给自定义过滤器函数? 在这种情况下,我需要task
和status
在过滤器功能中均可用。
但是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.