【问题标题】:Angular JS - ng-repeat filter object array based on multiple object properties using the same ng-modelAngular JS - 使用相同 ng-model 的基于多个对象属性的 ng-repeat 过滤器对象数组
【发布时间】:2015-06-12 05:52:39
【问题描述】:

我有一组看起来像的员工

$scope.Arr = [
           {'name':'John','title':'CEO','Age':'32'}, 
           {'name':'Jill', 'title':'Sales Executive', 'Age':'44'},
           {'name':'Alex','title':'Developer','Age':24}
          ];

我使用 ng-repeat 在 html 中呈现此数组,并希望使过滤器工作,以便可以使用相同的输入控件的值来过滤基于 nametitle 的员工。

<input type='text' data-ng-model='search.name' />

<div>
  <span data-ng-repeat="emp in Arr | filter:search">
  <p> {{emp.name}} </p>
  <p> {{emp.title}} </p>
  </span>
</div>

上面的代码只允许我根据员工姓名进行过滤

【问题讨论】:

  • 您想根据输入框中的内容过滤项目,对吗? (不仅仅是名称属性)
  • 将其更改为filter:search.name。请注意,它将模型值与所有属性进行比较,而不仅仅是名称和标题
  • @Swayam 这里是 plunker plnkr.co/edit/Fni3pDdOvYA8B7IpRCzD?p=preview。在过滤器中简单使用 search.name。
  • @squiroid @phil 我正在尝试使用search 模型根据nametitle 过滤emp。 search 而不是 search.name 工作得很好
  • 你能举个例子吗?

标签: javascript arrays angularjs


【解决方案1】:

您可以使用过滤器根据名称和标题进行搜索。

表达式“emp in Arr | filter: {name: $select.search, title: $select.search}”的默认 angularjs 过滤器在“name: $select.search”和“title: $”之间执行 AND选择.搜索"

编写自定义过滤器来执行 OR 操作

var app = angular.module('myApp', []);

app.filter('customFilter', function() {
    return function(names, title) {
        var output = [];

        if(angular.isArray(names)) {
            names.forEach(function(item) {
                var nameMatch = false;

                var keys = Object.keys(title);
                for(var i=0; i<keys.length; ++i) {
                    var t = keys[i];
                    var text = title[t].toLowerCase();
                    if(item[t].toString().toLowerCase().indexOf(text) !== -1) {
                        nameMatch = true;
                        break;
                    }
                }

                if(nameMatch) {
                    output.push(item);
                }
             });
          }
          else {
              output = names;
       }

       return output;
   };
});

基本上,此代码允许您根据名称和标题进行过滤。希望这会有所帮助。

【讨论】:

  • 我做了一个 plunker -> plnkr.co/edit/VzqvgYCesmsNRMWfEakk?p=preview .... 我希望这是你需要的。在选择框中,您可以根据“名称”和“标题”进行搜索。 “demo.js”定义了“customFilter”
  • 非常感谢您的详细回答。效果很棒:)
猜你喜欢
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多