将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>
你可以简单地做这个模板
<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