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

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

问题描述:

有没有什么方法以角$filter('filter')过滤有限的属性。AngularJS - 过滤对象中的选定属性

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'} 
    ]; 
}); 

问题
我称之为秘密的属性,我不希望用户根据该字段进行过滤,即,如果用户输入onetwo,则其应根据步骤nameage而不是secret进行过滤。

有没有办法在内置的角度过滤器呢?

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

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