我正在尝试使用angular.js过滤掉选择元素中的一些选项。问题是,对于模型中不符合过滤条件的每个项目,我在选择中都会得到一个空白的选项元素。
我的问题是:
如何修复自定义过滤器以删除空选项?
有没有办法修改我的 ng-options 指令的值以在标记中更声明性地执行此过滤器?
代码在下面,您也可以在 http://jsfiddle.net/G4qkW/
<div ng-app="myApp">
<div ng-controller="myController">
<select ng-model="militaryBranches" ng-options="m as m | coreBranches for m in militaryBranches">
<option value="">Select Military Branch</option>
</select>
</div>
function myController($scope) {
$scope.militaryBranches = [{
BranchId: '1',
Name: 'Air Force'
},{
BranchId: '2',
Name: 'Army'
},{
BranchId: '3',
Name: 'Coast Guard'
},{
BranchId: '4',
Name: 'Marines'
},{
BranchId: '5',
Name: 'Navy'
},{
BranchId: '6',
Name: 'National Guard 1'
},{
BranchId: '7',
Name: 'National Guard 2'
},{
BranchId: '8',
Name: 'Some Other Branch'
}];
}
var app = angular.module('myApp', []);
app.filter('coreBranches', function() {
return function(item) {
if (item.BranchId < 6) {
return item.Name;
}
};
});
我已经编辑了你的小提琴:http://jsfiddle.net/G4qkW/5/
我猜你想过滤掉分支,而不是显示它们的名字。您需要将筛选器应用于集合,而不是名称:
m.BranchId as m.Name for m in militaryBranches | coreBranches
要完成此操作,请按如下所示编辑筛选器:
app.filter('coreBranches',
function () {
return function (items) {
var filtered = [];
angular.forEach(items, function (item) {
if (item.BranchId < 6) {
filtered.push(item);
}
});
return filtered;
}
});