是否可以将参数传递给过滤器函数,以便您可以按任何名称进行过滤?
就像是
$scope.weDontLike = function(item, name) {
console.log(arguments);
return item.name != name;
};
是否可以将参数传递给过滤器函数,以便您可以按任何名称进行过滤?
就像是
$scope.weDontLike = function(item, name) {
console.log(arguments);
return item.name != name;
};
实际上还有另一个(可能更好的解决方案),您可以在其中使用 angular 的原生“过滤器”过滤器,并且仍然将参数传递给您的自定义过滤器。
考虑以下代码:
<div ng-repeat="group in groups">
<li ng-repeat="friend in friends | filter:weDontLike(group.enemy.name)">
<span>{{friend.name}}</span>
<li>
</div>
要完成这项工作,您只需将过滤器定义如下:
$scope.weDontLike = function(name) {
return function(friend) {
return friend.name != name;
}
}
正如您在此处看到的,weDontLike 实际上返回另一个函数,该函数在其范围内包含您的参数以及来自过滤器的原始项目。
我花了 2 天的时间才意识到你可以做到这一点,还没有在任何地方看到过这个解决方案。
查看angular.js 过滤器的反向极性以了解如何将其用于过滤器的其他有用操作。
据我了解,您不能将参数传递给过滤器函数(使用“过滤器”过滤器时)。您需要做的是编写一个自定义过滤器,如下所示:
.filter('weDontLike', function(){
return function(items, name){
var arrayToReturn = [];
for (var i=0; i<items.length; i++){
if (items[i].name != name) {
arrayToReturn.push(items[i]);
}
}
return arrayToReturn;
};
这是工作的 jsFiddle:http : //jsfiddle.net/pkozlowski_opensource/myr4a/1/
另一个简单的替代方法,不编写自定义过滤器是存储一个名称以在范围内过滤掉,然后编写:
$scope.weDontLike = function(item) {
return item.name != $scope.name;
};
实际上,您可以传递一个参数(http://docs.angularjs.org/api/ng.filter:filter)并且不需要为此自定义函数。如果您按如下方式重写 HTML,它将起作用:
<div ng:app>
<div ng-controller="HelloCntl">
<ul>
<li ng-repeat="friend in friends | filter:{name:'!Adam'}">
<span>{{friend.name}}</span>
<span>{{friend.phone}}</span>
</li>
</ul>
</div>
</div>
你可以简单地在模板中这样做
<span ng-cloak>{{amount |firstFiler:'firstArgument':'secondArgument' }}</span>
在过滤器
angular.module("app")
.filter("firstFiler",function(){
console.log("filter loads");
return function(items, firstArgument,secondArgument){
console.log("item is ",items); // it is value upon which you have to filter
console.log("firstArgument is ",firstArgument);
console.log("secondArgument ",secondArgument);
return "hello";
}
});
扩展pkozlowski.opensource 的答案并使用 javascriptarray's
内置过滤器方法,一个美化的解决方案可能是这样的:
.filter('weDontLike', function(){
return function(items, name){
return items.filter(function(item) {
return item.name != name;
});
};
});
这是 jsfiddle链接。
更多关于数组过滤器在这里。