我想使用$ filter('filter')过滤员工对象数组,根据员工的名字字段过滤结果,只能从下拉/选择中选择。请注意,我不想在ng-repeat“。
中使用”| filter:“难点在于name字段是另一个名为'details'的字段的属性,所以我不能像下面的代码那样detail.name,因为它会出错。
$scope.filteredEmployees = $filter('filter')(employees, {details.name: selectedName });
请参阅下面的employee数组对象的结构。
如何告诉它使用$ 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");
};
答案 0 :(得分:9)
表达式可以是map of property-to-filters:,其中对象中的每个属性都映射到结果集中的相应属性。
$filter('filter')(employees, {name:"Joe"});
如果您的数据更复杂,并且需要更高级的过滤,那么您只需传入自定义谓词函数来评估是否应过滤项目。
函数的输入将数组的每个项目作为参数,如果该项目应从结果集中排除,则应返回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);
});