AngularJS - 过滤对象中的选定属性
问题描述:
有没有什么方法以角$filter('filter')
过滤有限的属性。AngularJS - 过滤对象中的选定属性
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'}
];
});
问题
我称之为秘密的属性,我不希望用户根据该字段进行过滤,即,如果用户输入one
或two
,则其应根据步骤name
和age
而不是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;
});
};
}