【问题标题】:Need to add multiple filter in angular ui select需要在角度ui选择中添加多个过滤器
【发布时间】:2017-06-19 06:38:50
【问题描述】:

需要在angularuiselect2中添加多个过滤器。

<div class="form-group ">
    <ui-select id="abc" ng-model="abc" multiple theme="bootstrap"  >
       <ui-select-match placeholder="Select abc..." class="ui-select-match">{{$item.name | capitalize}}</ui-select-match>
        <ui-select-choices id= "abchoice" class="ui-select-choices" repeat="item in itemDetails| filter: $select.search ">
               <div id="selected_{{item}}" ng-bind-html="item .name | capitalize | highlight: $select.search" style="padding: 0px; "></div>
         </ui-select-choices>
     </ui-select>

</div>

我有

itemDetails=["a","b","c"]
orderItem=["c"] 

我还需要按filter: $select.search 过滤它,也需要按orderItem 过滤它。如何在 ui-select 中添加此自定义过滤器?

在下拉列表中我应该只得到 a、b,我应该过滤 c

【问题讨论】:

    标签: angularjs angularjs-filter angular-filters angular-ui-select


    【解决方案1】:

    试试类似的方法

    var app = angular.module('demo', ['ui.select']);
    app.controller('DemoCtrl', function($scope) {
    
      $scope.itemDetails = ['a','b','c'];
      $scope.orderItem = {};
      $scope.orderItem.items = ['a','b']; // by default selected items
    
    });
    

    在你看来

    <ui-select multiple ng-model="orderItem.items" theme="select2" ng-disabled="disabled" style="width: 300px;">
       <ui-select-match placeholder="Select order item...">{{$item}}</ui-select-match>
        <ui-select-choices repeat="item in itemDetails | filter:$select.search">
          {{item}}
        </ui-select-choices>
     </ui-select>
      <p>Selected: {{orderItem.items}}</p>
    

    Plunker 1

    使用过滤器排除项目

    控制器:

     'use strict';
        var app = angular.module('demo', ['ui.select']);
        app.controller('DemoCtrl', function($scope) {
          $scope.itemDetails = ['a','b','c'];
          $scope.orderItem = {};
          $scope.orderItem.items = null;
        });
      // filter to exclude a value/item
      app.filter('Exclude', function() {
          return function( items) {
            var filtered = [];
            angular.forEach(items, function(item) {
              if(item!='c'){
                filtered.push(item);
              }
            });
            return filtered;
          };          
     });
    

    查看:

    <p>Selected: {{orderItem.items}}</p>
      <ui-select ng-model="orderItem.items" theme="select2" ng-disabled="disabled" style="width: 300px;">
        <ui-select-match placeholder="Select order item...">{{$select.selected}}</ui-select-match>
        <ui-select-choices repeat="item in itemDetails | Exclude |  filter:$select.search">
          {{item}}
        </ui-select-choices>
      </ui-select>
    

    Plunker 2

    【讨论】:

    • 感谢回复......但我需要添加过滤器......我不应该在我的下拉列表中得到 c。,这就是我的问题。 @MMK
    • 你能帮帮我吗!@MMK
    • 需要自定义过滤器来排除不需要的对象。
    • @mammam 检查更新后的答案,希望对您有所帮助
    【解决方案2】:

    如果您需要从列表中过滤您的 orderItem,请将其删除到此列表中。

    你应该有 3 个列表:

    • allItems(将所有项目存储在某处)
    • 订单项
    • itemsInSelect

    当您从 itemsInSelect 中选择一项时,将其添加到 orderItems 并从 itemsInSelect 中删除。

    这是你想要的吗?

    【讨论】:

    • 有时候,以另一种方式看待问题就是解决方案;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 2021-05-03
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    相关资源
    最近更新 更多