AngularJS - 过滤对象中的选定属性

Posted

技术标签:

【中文标题】AngularJS - 过滤对象中的选定属性【英文标题】:AngularJS - Filter selected property in an object 【发布时间】:2015-06-04 11:14:58 【问题描述】:

角度$filter('filter')有什么方法可以过滤有限的属性。

Plnkr

HTML

<body ng-controller="MyCtrl">
      <input type="type" ng-model="filter_value" />
      <ul>
        <li ng-repeat="row in data | filter: filter_value">row.name +'--'+ row.age</li>
      </ul>
    </body>

JS

var app = angular.module('myApp', []);
app.controller('MyCtrl', function($scope, $filter) 
  $scope.data = [
    name: "Moroni", age: 50, secret: 'one',
    name: "Tiancum", age: 43, secret: 'one',
    name: "Jacob", age: 27, secret: 'two',
    name: "Nephi", age: 29, secret: 'two',
    name: "Enos", age: 34, secret: 'two'
  ];
);

问题 我有一个名为 secret 的属性,我不希望用户根据该字段进行过滤,即,如果用户输入 onetwo,则应根据属性 nameage 而不是 @ 987654329@.

有没有办法在内置的角度滤镜中做到这一点?

【问题讨论】:

【参考方案1】:

您必须使用自定义过滤器手动排除不需要的字段。

这是一个固定的plnkr

html:

<body ng-controller="MyCtrl">
  <input type="type" ng-model="search.filter_value" />
  <ul>
    <li ng-repeat="row in data | usersListFilter:search.filter_value">row.name +'--'+ row.age</li>
  </ul>
</body>

javascript

app.filter('usersListFilter', usersListFilter);

function usersListFilter() 
  return function(usersArray, searchTerm)
    if (!searchTerm) return usersArray;

    var term = searchTerm.toLowerCase();
    return usersArray.filter(function(user) 
      return user.name.toLowerCase().indexOf(term) != -1 || user.age.toString().indexOf(term) != -1;
    );
  ;

【讨论】:

以上是关于AngularJS - 过滤对象中的选定属性的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 angularjs 中的选定对象更新 ng-model?

如何过滤剑道网格(AngularJs)中的对象数组?

如何使用angularjs添加动态过滤功能来处理高级搜索?

Swift:获取由某个属性过滤的对象数组的索引

AngularJS ng Repeat - 使用复选框按单个对象属性筛选列表

一篇入门AngularJS