Answers:
实际上,还有另一个(也许是更好的解决方案),您可以使用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实际上返回另一个函数,该函数的范围内有您的参数以及来自过滤器的原始项。
我花了两天的时间才意识到您可以执行此操作,但尚未见过此解决方案。
检出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>
filter:['Adam', 'john']
您可以在模板中简单地做到这一点
<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";
}
});
您可以将多个参数传递给角度滤镜!
定义我的角度应用程序和应用程序级别变量-
var app = angular.module('filterApp',[]);
app.value('test_obj', {'TEST' : 'test be check se'});
您的筛选器将类似于:-
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,在这种情况下,您必须使用参数来获取这些参数。
对于有效的演示,请转到此处- 将多个参数传递给角度滤镜