AngularJS:使用ng-options进行过滤

时间:2015-06-15 09:41:41

标签: angularjs angularjs-filter

我可以在过滤整个对象时对我的选项使用过滤器,但我只希望过滤器应用于name属性,这是我无法工作的。无论输入中输入什么内容,下面的结果都不会改变选择中显示的内容。我的答案基于这里找到的答案 - Use filter on ng-options to change the value displayed

<input type="search" class="form-control" placeholder="Filter user groups" results="0" ng-model="searchText" />

<select class="form-control"
        size="8"
        multiple
        ng-model="UserGroupsSelected"
        ng-options="userGroup.Id as (userGroup.Name | filter:searchText) for userGroup in AvailableUserGroups" >

但是,如果我有 -

,过滤器确实有效
ng-options="userGroup.Id as userGroup.Name for userGroup in AvailableUserGroups | filter:searchText"

问题在于我不想按整个对象进行过滤,否则就会出现看似随机且不需要的结果。

2 个答案:

答案 0 :(得分:5)

您可以将过滤器指定为参数名称等于搜索字段的对象。 为了您的目的,尝试将searchText.Name作为搜索文本的模型。它应该只通过&#34; Name&#34;。

来过滤对象
<input type="search" class="form-control" placeholder="Filter user groups" results="0" ng-model="searchText.Name" />

<select class="form-control"
        size="8"
        multiple
        ng-model="UserGroupsSelected"
        ng-options="userGroup.Id as userGroup.Name for userGroup in AvailableUserGroups | filter:searchText">

答案 1 :(得分:0)

您可以通过以下方式创建自己的过滤器:

AvailableUserGroups|byNameInSearchText:searchText

声明:

myapp.filter('byNameInSearchText', function() {
    return function(availableUserGroups,textName) {
        if (typeof textName !== "undefined" && textName !== null) {
           return availableUserGroups.filter(function(u) {
                return (u.Name != null) && u.Name.indexOf(textName) !== -1;
            });
        }
        else return availableUserGroups;
    };
});