是否可以将参数传递给过滤器函数,以便可以按任何名称进行过滤?将参数传递给angularjs过滤器
喜欢的东西
$scope.weDontLike = function(item, name) {
console.log(arguments);
return item.name != name;
};
是否可以将参数传递给过滤器函数,以便可以按任何名称进行过滤?将参数传递给angularjs过滤器
喜欢的东西
$scope.weDontLike = function(item, name) {
console.log(arguments);
return item.name != name;
};
其实还有另外一个(也许更好的解决方案),您可以使用角度的本地“过滤器”过滤器,并且仍然将参数传递给你的定制过滤器。
考虑下面的代码:
<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天才意识到你可以做到这一点,还没有看到任何地方的解决方案。
结帐Reverse polarity of an angular.js 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/
其他简单的替代,而无需编写自定义过滤器是一个名字存储筛选出的范围,然后写:
$scope.weDontLike = function(item) {
return item.name != $scope.name;
};
这是完美的感谢!在范围中存储名称将不会如我所见,在同一页面上具有来自同一数据的三个列表,即使用不同的状态(或名称)进行过滤。 – shapeshifter 2012-08-01 07:03:36
任何设置'亚当'(指您的JSFiddle)动态?这似乎是不可能的(我想这是故意的)将ngModel和Angular中的自定义过滤器结合起来... – Rolf 2013-04-20 21:34:17
是否可以重新排序过滤器的参数?例如,将项目传递给过滤器的第二个参数? – Pooya 2014-12-24 13:11:41
其实你可以传递参数(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>
是的。附注 - 如果某人的名字是'!Adam',你可以像{name:'!! Adam'}那样得到他。 – honzajde 2013-03-10 00:21:52
你也可以在这里传递数组,像这样'filter:['Adam','john']' – iConnor 2013-08-11 23:12:07
jsfiddle链接被破坏。 – Seregwethrin 2014-01-27 13:35:28
扩展上pkozlowski.opensource's answer和使用javascript array's
内置过滤方法的美化解决方案是这样的:
.filter('weDontLike', function(){
return function(items, name){
return items.filter(function(item) {
return item.name != name;
});
};
});
这里的的jsfiddle link。
更多关于阵列过滤器here。
你可以简单地做这样的 模板
<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对象到过滤器。 您也可以发送任何类型的数据,如字符串或数字。
,你也可以通过动态数量的参数中,你必须使用参数得到这些参数的话来过滤, 。
对于工作演示去这里 - passing multiple arguments to angular filter
这实际上应该被接受,这是OP的问题的一个解决方案。尼斯一个不错的人! – ChrisR 2013-11-28 13:42:51
如果您的过滤器需要多个参数,请参见[如何使用多个参数调用Angular.js过滤器?](http://stackoverflow.com/questions/16227325/how-do-i-call-an-angular- js-filter-with-multiple-arguments) – nh2 2014-02-27 15:24:24
同意,这应该是选择的解决方案。十分优雅! – JSancho 2014-10-17 12:20:13