NG-Option上使用的自定义角度滤波器将选项留空



我正在尝试使用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;        
    }
});

最新更新