我想使用$ filter('filter')过滤员工对象数组,以仅基于可从下拉/选择中选择的员工的名字字段过滤结果。请注意,我不想在ng-repeat中使用“|过滤器:”。
困难之处在于name字段是另一个名为“details”的字段的属性,因此我无法像下面的代码一样detail.name,因为它将出错。
$scope.filteredEmployees = $filter('filter')(employees, {details.name: selectedName });
有关员工数组对象的结构,请参见下文。
如何使用$ filter('filter')告诉它根据details.name字段过滤记录?
预先感谢您的帮助!
这是代码:
Var selectedName = “An”;
$scope.filteredEmployees = $filter('filter')(employees, {**details.name:** selectedName });
Var employees = [
{
Date: 01/01/2012
details: {
name: ‘An’,
age: 25
}
},
{
Date: 01/01/2012
details: {
name: ‘'Bill',
age: 20
}
}];
//Here is
<select ng-model="selectedName" ng-options="e for e in employees" data-ng-show="employees.length > 0" ng-change="filterEmployees">
<option value="">All Employees</option>
</select><br>
function filterEmployees() {
$scope.filteredEmployees = $filter('filter')(employees, "Joe");
};
最佳答案
该表达式可以是map of property-to-filters:,其中对象中的每个属性都映射到结果集中的相应属性。
$filter('filter')(employees, {name:"Joe"});
Live Demo
使用自定义功能
如果数据更复杂,并且需要更高级的过滤,则可以简单地传入自定义谓词函数来评估是否应过滤项目。
函数的输入将数组的每个项目作为参数,并且如果应从结果集中排除该项目,则应返回
false
。var people = [{date:new Date(), details:{
name: 'Josh',
age: 32
}}, {date:new Date(), details:{
name: 'Jonny',
age: 34
}}, {date:new Date(), details:{
name: 'Blake',
age: 28
}}, {date:new Date(), details:{
name: 'David',
age: 35
}}];
$scope.filteredPeople = $filter('filter')(people, function(person){
return /^Jo.*/g.test(person.details.name);
});
Live Demo
关于angularjs - 如何使用$ filter过滤对象数组中的特定字段('filter'),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22851571/