是否可以将参数传递给filter函数,以便您可以按任何名称进行过滤?
就像这样
$scope.weDontLike = function(item, name) {
console.log(arguments);
return item.name != name;
};
发布于 2013-07-23 22:57:45
实际上,还有另一个(也许是更好的解决方案),你可以使用angular的原生' filter‘过滤器,同时仍然将参数传递给你的自定义过滤器。
考虑以下代码:
<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实际上返回了另一个函数,该函数在其作用域中包含您的参数以及来自筛选器的原始项。
我花了两天时间才意识到你可以做到这一点,我还没有在任何地方看到这个解决方案。
查看Reverse polarity of an angular.js filter,了解如何将其用于其他有用的filter操作。
发布于 2012-08-01 14:20:28
据我所知,你不能将参数传递给过滤器函数(当使用‘过滤器’过滤器时)。你需要做的就是编写一个自定义的过滤器,就像这样:
.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;
};
发布于 2012-09-21 17:45:00
实际上,您可以传递一个参数( 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>
https://stackoverflow.com/questions/11753321
复制相似问题