Javascript 按深度属性重复过滤

Javascript 按深度属性重复过滤,javascript,json,angularjs,filter,angularjs-ng-repeat,Javascript,Json,Angularjs,Filter,Angularjs Ng Repeat,如果有一个以对象作为属性值的复杂对象,如何按其中一个嵌套属性进行过滤 这可以通过OOB ng重复过滤器完成吗 数据 { Name: 'John Smith', Manager: { id: 123, Name: 'Bill Lumburg' } } ngRepeat <li ng-repeat="e in emps | filter:Manager.Name">{{ e.Name }}</li> {{e.Name} 您需要传入参数以筛选

如果有一个以对象作为属性值的复杂对象,如何按其中一个嵌套属性进行过滤

这可以通过OOB ng重复过滤器完成吗

数据

{
  Name: 'John Smith',
  Manager: {
     id: 123,
     Name: 'Bill Lumburg'
  }
}
ngRepeat

<li ng-repeat="e in emps | filter:Manager.Name">{{ e.Name }}</li>
  • {{e.Name}

  • 您需要传入参数以筛选依据:

    <input ng-model="filter.key">
    <ul>
      <li ng-repeat="e in list | filter: {Manager: {Name: filter.key}}">
        {{e.Name}}  (Manager: {{e.Manager.Name}})
      </li>
    </ul>
    
    
    
    • {{e.Name}(经理:{{e.Manager.Name})

    在最新版本的angularjs中,默认实现嵌套obj过滤器。可以正常使用过滤器。
    它仅适用于angular 1

    要使用多个深度属性进行过滤,我们需要创建自定义过滤器。 我的意思是我们需要创建自己的函数来过滤对象中的数据并返回所需的对象(过滤对象)。

    例如,我需要从下面的对象中筛选数据-

    [
    {
       "document":{
          "documentid":"1",
          "documenttitle":"test 1",
          "documentdescription":"abcdef"
           }
    },
    {
       "document":{
          "documentid":"2",
          "documenttitle":"dfjhkjhf",
          "documentdescription":"dfhjshfjdhsj"
           }
    }
    ]
    
    在HTML中,我们使用ng repeat来显示文档列表-

    <div>
       //search input textbox
       <input ng-model="searchDocument" placeholder="Search">
     </div>
    <div ng-repeat="document in documentList | filter: filteredDocument">
       //our html code 
    </div>
    

    其中,$scope.searchDocument是绑定到搜索文本框(HTML输入标记)的范围变量,用户可以在其中输入要搜索的文本。

    如果要筛选多个属性,则语法类似于下面的内容

    <ul>
      <li ng-repeat="item in list | {filter: top_object_property_name: value, top_object_property_with_nested_objects_name: {nested_object_property_name: value}}">
           ...
      </li>
    </ul>
    
    • ...
    例如:

    var employees=[name:'John',角色:[{roleName:'Manager'},{roleName:'Supervisor'}];
    
  • ...

  • 如果某些对象没有管理器属性,即使过滤器为空,它们也不会出现。你知道一种包含它们的方法吗?如果名称是一个数组,而我只想过滤名字怎么办?@bludawer也许这可以帮助一些人我发现这个答案非常混乱。它是如何回答这个问题的呢?亲爱的先生(@Jason Swett),当我们有一个对象数组,并且该对象中有另一个对象属性,例如数组对象的“document”属性,那么我们需要在控制器中创建自定义过滤器来实现“搜索”类似于功能。亲爱的@Murali,上述解决方案仅适用于angular 1。@Murali我使用angular 4,但无法正常过滤记录
    <ul>
      <li ng-repeat="item in list | {filter: top_object_property_name: value, top_object_property_with_nested_objects_name: {nested_object_property_name: value}}">
           ...
      </li>
    </ul>
    
            var employees = [name: 'John', roles: [{roleName: 'Manager'},{roleName: 'Supervisor'}]];
    
            <li ng-repeat="staff in employees | {filter: name: 'John', roles: {roleName: 'Manager'}}">
                  ...
            </li>