Angular $filter('filter')
有什么方法可以过滤有限的属性。
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 的属性,我不希望用户根据该字段进行过滤,即,如果用户输入 one
或 two
,它应该根据该属性进行过滤姓名
和年龄
,而不是 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/