将parameter passing给angularjsfilter

是否有可能将parameter passing给过滤函数,以便您可以过滤任何名称?

就像是

$scope.weDontLike = function(item, name) { console.log(arguments); return item.name != name; }; 

其实有另一个(也许更好的解决scheme),你可以使用angular的本地“filter”filter,仍然传递参数到您的自定义filter。

考虑下面的代码:

 <div ng-repeat="group in groups"> <li ng-repeat="friend in friends | filter:weDontLike(group.enemy.name)"> <span>{{friend.name}}</span> <li> </div> 

为了使这个工作,你只需定义你的filter如下:

 $scope.weDontLike = function(name) { return function(friend) { return friend.name != name; } } 

正如你在这里看到的,weDontLike实际上会返回另外一个函数,它的作用域中包含你的参数,以及来自filter的原始项目。

花了我2天才意识到你可以做到这一点,还没有看到这个解决scheme。

Checkout angular.jsfilter的极性反转,以了解如何将其用于其他有用的filter操作。

从我的理解你不能传递一个参数到一个filter函数(当使用“filter”filter)。 你将不得不做的是写一个自定义filter,像这样:

 .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/

另一个简单的select是,不用编写自定义filter,就是将一个名称过滤掉,然后写入:

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

http://jsfiddle.net/ZfGx4/59/

你可以简单地做这个模板

 <span ng-cloak>{{amount |firstFiler:'firstArgument':'secondArgument' }}</span> 

在filter中

 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的答案和使用JavaScript array's内置filter方法一个美化的解决scheme可能是这样的:

 .filter('weDontLike', function(){ return function(items, name){ return items.filter(function(item) { return item.name != name; }); }; }); 

这是jsfiddle 链接 。

有关数组filter的更多信息

您可以将多个parameter passing给angular度filter!

定义我的angular度应用程序和应用程序级别variables –

 var app = angular.module('filterApp',[]); app.value('test_obj', {'TEST' : 'test be check se'}); 

您的filter将如下所示: –

 app.filter('testFilter', [ 'test_obj', function(test_obj) { function test_filter_function(key, dynamic_data) { if(dynamic_data){ var temp = test_obj[key]; for(var property in dynamic_data){ temp = temp.replace(property, dynamic_data[property]); } return temp; } else{ return test_obj[key] || key; } } test_filter_function.$stateful = true; return test_filter_function; }]); 

而从HTML你会发送数据如:

 <span ng-bind="'TEST' | testFilter: { 'be': val, 'se': value2 }"></span> 

在这里,我发送一个JSON对象到filter。 您也可以发送任何types的数据,如string或数字。

你也可以传递dynamic数量的参数来过滤,在这种情况下,你必须使用参数来获取这些参数。

对于一个工作演示去这里 – 传递多个参数到angular度filter