Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将参数传递给angularjs筛选器_Javascript_Angularjs_Angular Filters - Fatal编程技术网

Javascript 将参数传递给angularjs筛选器

Javascript 将参数传递给angularjs筛选器,javascript,angularjs,angular-filters,Javascript,Angularjs,Angular Filters,是否可以将参数传递给filter函数,以便您可以按任何名称进行筛选 差不多 $scope.weDontLike = function(item, name) { console.log(arguments); return item.name != name; }; 据我所知,您不能将参数传递给过滤器函数(在使用“过滤器”过滤器时)。您需要做的是编写一个自定义筛选器,如下所示: .filter('weDontLike', function(){ return function

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

差不多

$scope.weDontLike = function(item, name) {
    console.log(arguments);
    return item.name != name;
};

据我所知,您不能将参数传递给过滤器函数(在使用“过滤器”过滤器时)。您需要做的是编写一个自定义筛选器,如下所示:

.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;
};

实际上,您可以传递一个参数(),而不需要为此而定制函数。如果您按照以下方式重写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>

  • {{friend.name} {{朋友.电话}

实际上,还有另一种(可能更好的解决方案)可以使用angular的本机“过滤器”过滤器,并且仍然可以将参数传递给自定义过滤器

考虑以下代码:

<div ng-repeat="group in groups">
    <li ng-repeat="friend in friends | filter:weDontLike(group.enemy.name)">
        <span>{{friend.name}}</span>
    <li>
</div>
正如您在这里看到的,weDontLike实际上返回另一个函数,该函数的作用域中包含您的参数以及来自过滤器的原始项

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

签出查看如何将其用于过滤器的其他有用操作。

扩展并使用javascript
数组的内置过滤器方法一个经过修饰的解决方案可以是:

.filter('weDontLike', function(){
    return function(items, name){
        return items.filter(function(item) {
            return item.name != name;
        });
    };
});
这是jsfiddle


有关阵列过滤器的更多信息。

您可以这样做 模板中

<span ng-cloak>{{amount |firstFiler:'firstArgument':'secondArgument' }}</span>

您可以将多个参数传递给角度过滤器

定义我的角度应用程序和应用程序级别变量-

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:yourFunction:arg

<div ng-repeat="group in groups | filter:weDontLike:group">...</div>

太好了,谢谢!将名称存储在作用域中不会很好地工作,因为我在同一页面上有三个来自相同数据的列表,im使用不同的状态(或名称)进行过滤。要动态设置“Adam”(指JSFIDLE)吗?似乎不可能(我想这是故意的)将ngModel和一个定制的过滤器结合在一起…有可能对过滤器的参数重新排序吗?例如,将项传递给筛选器的第二个参数?值得注意的是,在本例中,标记为{{items | weDontLike:'thenameyoudontlike'}。。。现在你必须去小提琴那里拿。还值得注意的是,您可以将多个参数传递给自定义筛选器{{items | weDontLike:'thename':['I am','an array']:'等'}}}。您只需向自定义筛选器添加更多参数即可访问它们。是的。旁注-如果某人的名字是'!Adam',你可以像{name:'!!Adam'}一样得到他。你也可以像这样在这里传递数组
filter:['Adam',john']
jsfiddle链接断了。!Adam是最差的名字everNot Adam显然更差。如果您的筛选器需要多个参数,请参阅此方法还解决了一个奇怪的问题,即在ng repeat中,我无法将自己的参数传递给筛选器。无论我做了什么,它们都会作为索引和整体收藏回来。通过使用这个返回方法,我能够传递我的参数,并且仍然加载原始元素,非常好的修复!这个答案解决了我无法将$scope变量作为参数传递给filter函数的问题。最佳解决方案。向上投票!如果我能不止一次地投票支持这一点,我会确保这是有史以来投票支持率最高的答案。这件事已经困扰了我好几年了。。。然后我找到了(现在2岁)答案。。。非常感谢你。@DennisSmolek我有一个疑问,很久以来我对这一点感到震惊。如何在过滤函数
$scope.weontlike
中访问
friend
。在我的例子中,当我尝试时,我得到一条错误消息,说'angular.js:12520 ReferenceError:friend未定义',这是最好的答案。它适用于动态对象。这应该是公认的答案。
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;
  }]);
<span ng-bind="'TEST' | testFilter: { 'be': val, 'se': value2 }"></span>
<div ng-repeat="group in groups | filter:weDontLike:group">...</div>
$scope.weDontLike = function(group) {
//here your condition/criteria
return !!group 
}