2014-10-07 192 views
0

我怎么样AngularJS过滤工程和只想功能添加到现有的一个,以允许阵列使用,看是否有值在数组中。扩展AngularJS过滤器或构建自定义过滤器

如果我有以下数据:

Queue = [ 
    {'Name':'John','Tier':'Gold','Status':'VIP'}, 
    {'Name':'Anna','Tier':'Silver','Status':'Normal'}, 
    {'Name':'Luke','Tier':'Gold','Status':'Normal'}, 
    {'Name':'Mary','Tier':'Bronze','Status':'Normal'}, 
    {'Name':'Jess','Tier':'Bronze','Status':'VIP'}, 
]; 
Priority = ['Gold','Silver']; 

我想列出我所有的优先级成员,也是视障者的名字。

<div ng-repeat="people in Queue | filter: {Tier:Priority} | filter: {Status:'VIP'}">{{ people.Name }}</div> 

我想添加过滤器的功能,以检查层是否等于优先数组中的项目之一。

我曾看过用AngularJS构建一个自定义过滤器,但我不知道如何使该客户过滤器与现有过滤器一样工作,即能够像现有过滤器那样处理对象,字符串或函数。

我不检查,如果在数组中存在的一个项目的代码之后这么多,我创建以同样的方式,我可以再添加代码过滤器的代码后,我来检测,如果给定的值是一个字符串或数组。

回答

0

我将使用正则表达式在这种情况下,通过自定义过滤器来检查。

以html:

<body ng-app="myApp"> 
    <tr ng-repeat="item in Queue | regex:'Tier':Priority | filter:{Status :'VIP'}"> 
    </body> 

和自定义过滤器:

var myApp = angular.module('myApp', []); 
myApp.filter('regex', function() { 
    return function(input, field, priList) { 
    var result = []; 
    var priListExp = priList.join("|"); 
    var patt = new RegExp(priListExp, "i"); // without , "i" if you want to use case insensitive 
     input.forEach(function(pri){ 
     if(patt.test(pri[field])) { 
      result.push(pri); 
     } 
    }); 

    return result; 
    } 
}); 

演示:Plunker

0

这是一种思想,它不是一个工作代码。如果您传递参数的过滤器,U可以把它写下来是这样的:

module.filter('filterName', function() { 
return function(input, tier, status) { 
if (input.Tier == tier) 
{ 
    //do something 
} 
if (input.Status == status) 
{ 
    //do something 
} 
return input; 
} 
}); 

在HTML -

<div ng-repeat="people in Queue | filterName:'Priority':'VIP'">{{ people.Name }}</div>