首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将参数传递给angularjs过滤器

将参数传递给angularjs过滤器
EN

Stack Overflow用户
提问于 2012-08-01 13:56:25
回答 6查看 135.7K关注 0票数 99

是否可以将参数传递给filter函数,以便您可以按任何名称进行过滤?

就像这样

代码语言:javascript
复制
$scope.weDontLike = function(item, name) {
    console.log(arguments);
    return item.name != name;
};
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-07-23 22:57:45

实际上,还有另一个(也许是更好的解决方案),你可以使用angular的原生' filter‘过滤器,同时仍然将参数传递给你的自定义过滤器。

考虑以下代码:

代码语言:javascript
复制
<div ng-repeat="group in groups">
    <li ng-repeat="friend in friends | filter:weDontLike(group.enemy.name)">
        <span>{{friend.name}}</span>
    <li>
</div>

要实现这一点,您只需按如下方式定义过滤器:

代码语言:javascript
复制
$scope.weDontLike = function(name) {
    return function(friend) {
        return friend.name != name;
    }
}

正如您在这里看到的,weDontLike实际上返回了另一个函数,该函数在其作用域中包含您的参数以及来自筛选器的原始项。

我花了两天时间才意识到你可以做到这一点,我还没有在任何地方看到这个解决方案。

查看Reverse polarity of an angular.js filter,了解如何将其用于其他有用的filter操作。

票数 225
EN

Stack Overflow用户

发布于 2012-08-01 14:20:28

据我所知,你不能将参数传递给过滤器函数(当使用‘过滤器’过滤器时)。你需要做的就是编写一个自定义的过滤器,就像这样:

代码语言:javascript
复制
.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/

另一种简单的替代方法,不需要编写自定义过滤器,就是在作用域中存储一个要过滤掉的名称,然后写道:

代码语言:javascript
复制
$scope.weDontLike = function(item) {
  return item.name != $scope.name;
};
票数 76
EN

Stack Overflow用户

发布于 2012-09-21 17:45:00

实际上,您可以传递一个参数( http://docs.angularjs.org/api/ng.filter:filter ),而不需要专门为此而定制的函数。如果你像下面这样重写你的HTML,它将会工作:

代码语言:javascript
复制
<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/

票数 61
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11753321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档