【问题标题】:Angular Filter by property OR another property按属性或其他属性进行角度过滤
【发布时间】:2016-05-19 15:55:54
【问题描述】:

我一直在尝试使用角度过滤器$filter('filter') 以编程方式过滤数组。我想根据两个属性进行过滤,但我希望结果在一个属性和/或另一个属性中搜索。

使用这个数组

 [{
    id:1,
    name:'User2',
    rut:'22.222.222-2',
    created_at:'2016-03-23T18:36:34.404Z',
    updated_at:'2016-03-23T18:36:34.404Z',
    role_id:1},

  {
    id:2,
    name:'User1',
    rut:'11.111.111-1',
    created_at:'2016-03-23T18:36:34.416Z',
    updated_at:'2016-03-23T18:36:34.416Z',
    role_id:3}
];

当我使用字符串“2016”进行搜索时,我得到了整个数组,因为我的过滤器搜索了所有属性,如果我搜索,我需要查看属性name 或@987654324 @。

这是我的搜索功能:

vm.usersList = angular.copy(UsersResolve);

function search(_searchString){
   vm.usersList = $filter('filter')(UsersResolve, {$: _searchString})
                                  : UsersResolve;
 }

【问题讨论】:

    标签: angularjs filter


    【解决方案1】:

    $filter('filter')(数组、表达式、比较器)

    表达式参数可以是function(value, index, array) {}。您可以使用它来过滤掉数组。

    var searchString = '2016';
    vm.usersList = $filter('filter')(UserResolve, function(value, index, array){
        if(value.name == searchString || value.rut == searchString) {
          return true;
        }    
      });
    

    看到这个Plunker

    【讨论】:

      【解决方案2】:

      这样的事情应该可以工作。您也许可以将其调整为 $filter。

      function search(_searchString){
         vm.usersList = vm.usersList.filter( function(user) {
             return user.name.indexOf(_searchString) >-1 || user.rut.indexOf(_searchString) 
         }
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-20
        • 1970-01-01
        • 2020-08-03
        相关资源
        最近更新 更多