Angularjs 我是否可以在ng repeat中使用filter来筛选特定字段的多个项目

Angularjs 我是否可以在ng repeat中使用filter来筛选特定字段的多个项目,angularjs,angularjs-ng-repeat,Angularjs,Angularjs Ng Repeat,我正在为网格设计过滤解决方案。过滤器在面板中包含多个复选框。我目前有一个工作解决方案,它使用ng repeat指令中内置的过滤器。但是,我还没有找到一种方法使它能够过滤具有多个参数的单个字段。这就是我所拥有的: HTML: 我想要的是能够做这样的事情: var defaultFilter = {critical:'', score:'', category:'', pass:'false && notRun'}; 我不确定这是否可行。我已经找到了它的语法,但还没有找到。我知道有

我正在为网格设计过滤解决方案。过滤器在面板中包含多个复选框。我目前有一个工作解决方案,它使用ng repeat指令中内置的过滤器。但是,我还没有找到一种方法使它能够过滤具有多个参数的单个字段。这就是我所拥有的:

HTML:

我想要的是能够做这样的事情:

var defaultFilter = {critical:'', score:'', category:'', pass:'false && notRun'};

我不确定这是否可行。我已经找到了它的语法,但还没有找到。我知道有很多方法可以把它放在控制器中,但是由于我们目前的项目,这个实现会容易得多

假设您使用的是1.0.x分支,下面的脚注中显示了对对象进行过滤的方法。这表明标准过滤器找到要测试的键,然后获取
var text=(“”+expression[key]).toLowerCase()search
之前,从搜索条件中选择code><代码>搜索然后使用(
indexOf(text)>-1
进行文本搜索

因此,您不能将搜索条件中的某个项设置为需要以您尝试的方式进行计算的表达式

您唯一的其他选择是:

  • 使用a作为筛选器的参数(只需返回true/false);或
  • 编写自己的过滤器(只需从原始数组返回一个新数组)
  • 谓词函数
    $scope.myFilterTest(项){返回…正确或错误的测试结果…;}
    
    以及:

    
    
    自定义过滤器
    var someApp=angular.module('myApp',[]);
    someApp.filter('complexFilter',function(){
    返回函数(输入、标准){
    var结果=[];
    对于(变量i=0;i
    然后:

    
    

    脚注:

    案例“对象”:
    for(表达式中的var键){
    如果(键=“$”){
    (功能(){
    var text=(''+表达式[key]).toLowerCase();
    如果(!text)返回;
    谓词.push(函数(值){
    返回搜索(值、文本);
    });
    })();
    }否则{
    (功能(){
    var路径=键;
    var text=(''+表达式[key]).toLowerCase();
    如果(!text)返回;
    谓词.push(函数(值){
    返回搜索(getter(值、路径)、文本);
    });
    })();
    }
    }
    打破
    
    假设您使用的是1.0.x分支,下面的脚注中显示了对对象进行过滤的方法。这表明标准过滤器找到要测试的键,然后获取
    var text=(''+表达式[key])。toLowerCase()在调用
    search
    search
    之前,从搜索条件中选择
    ,然后使用(
    indexOf(text)>-1
    进行文本搜索

    因此,您不能将搜索条件中的某个项设置为需要以您尝试的方式进行计算的表达式

    您唯一的其他选择是:

  • 使用a作为筛选器的参数(只需返回true/false);或
  • 编写自己的过滤器(只需从原始数组返回一个新数组)
  • 谓词函数
    $scope.myFilterTest(项){返回…正确或错误的测试结果…;}
    
    以及:

    
    
    自定义过滤器
    var someApp=angular.module('myApp',[]);
    someApp.filter('complexFilter',function(){
    返回函数(输入、标准){
    var结果=[];
    对于(变量i=0;i
    然后:

    
    

    脚注:

    案例“对象”:
    for(表达式中的var键){
    如果(键=“$”){
    (功能(){
    var text=(''+表达式[key]).toLowerCase();
    如果(!text)返回;
    谓词.push(函数(值){
    返回搜索(值、文本);
    });
    })();
    }否则{
    (功能(){
    var路径=键;
    var text=(''+表达式[key]).toLowerCase();
    如果(!text)返回;
    谓词.push(函数(值){
    返回搜索(getter(值、路径)、文本);
    });
    })();
    }
    }
    打破
    
    是的,您可以使用自定义过滤器来实现这一点,这是您问题的答案

    和小提琴链接


    是的,您可以使用自定义过滤器来实现这一点,这是您的问题的答案

    和小提琴链接


    你能给出一个更完整的例子吗?比如在JSFIDLE中?我很难理解你想做什么,或者更具体地说,什么不起作用。@BrianGenisio-由于应用程序的性质,我不能深入太多细节,但要点是我使用ng repeat在数据集上迭代并填充网格。我有一个附加到该网格的lter将填充示例中设置的filterOrder变量。只要每个项只设置一个“筛选器”(即-临界:“true”),它就可以工作,但是,只要我尝试将多个参数作为筛选器,它就不起作用(即-临界:“true”和“false”)。我不确定这在ng repeat指令中是否可行,或者我只是语法有误。你能给出一个更完整的例子吗?比如在JSFIDLE中?我很难理解你在尝试做什么,或者更具体地说,什么不起作用。@BrianGenisio-由于应用程序的性质,我不能详细介绍,但是要点是,我正在使用ng repeat对数据集进行迭代并填充网格。我在该网格上附加了一个筛选器,该筛选器将填充示例中设置的filterOrder变量。只要每个项只设置一个“筛选器”(即-critical:“true”),
    var defaultFilter = {critical:'', score:'', category:'', pass:'false'};
    $scope.filterOrder = defaultFilter;
    
    var defaultFilter = {critical:'', score:'', category:'', pass:'false && notRun'};
    
    filterMultiple