【问题标题】:AngularJS - Filter selected property in an objectAngularJS - 过滤对象中的选定属性
【发布时间】: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@.

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

【问题讨论】:

    标签: javascript angularjs filtering angularjs-filter


    【解决方案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;
        });
      };
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 2015-05-23
      相关资源
      最近更新 更多