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

标签 javascript angularjs filtering angularjs-filter

Angular $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,它应该根据该属性进行过滤姓名年龄,而不是 secret

有没有办法在内置 Angular 过滤器中做到这一点?

最佳答案

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

这是一个固定的 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;
    });
  };
}

关于javascript - AngularJS - 过滤对象中选定的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29363155/

相关文章:

ios - SearchBar 在过滤时忽略字符

javascript - 使用 Durandal 和 Require 进行静态模块声明

javascript - 使用 Calendar API 更改 Google 日历事件的空闲/忙碌

java - Kendo UI 简单网格

indexing - Elasticsearch:将映射字段类型ID从长整数更新为字符串

java - 按字段过滤自定义 POJO 的 ListView

javascript - 如何使用 JS 或 CSS 将 TABLE 转为圆 Angular ?

javascript - 在 Ionic 中将 $ionicSlideBoxDelegate 用于两个或多个幻灯片框

angularjs - Restangular - $http 拦截器

javascript - 如何使用 $http 服务请求 API 数据