【问题标题】:ng-option filter not working angularjsng-option过滤器不起作用
【发布时间】:2015-10-09 20:42:58
【问题描述】:

我正在尝试使用 ng-options 在选择中显示数组中的数据,我想过滤它不起作用。我不想显示具有 billHeadShortForm=FEC & FDG 的对象

这是我的 HTML

<select class="form-control" ng-init="getBillHeadCurrentProjWise()" ng-model="headID" ng-options="h.billHeadID as h.billHead for h in billHeadsProjWise | filter:h.billHeadShortForm!='FEC' | h.billHeadShortForm!='FDG'">
     <option value="">--Select Billing Head--</option>
</select>

【问题讨论】:

    标签: javascript angularjs ng-options


    【解决方案1】:

    我找到了解决办法

      $scope.myFunction = function (Billhead) {
        if (Billhead.billHeadShortForm == 'FEC' || Billhead.billHeadShortForm == 'FDG' || Billhead.billHeadShortForm == 'GL') {
            return false;
        } else {
            return true;
        }
    }
    
    
      ng-options="h.billHeadID as h.billHead for h in billHeadsProjWise | filter:myFunction"
    

    【讨论】:

    • 这是迄今为止这个问题的最佳解决方案,为了进一步解决这个问题,您可以创建一个新的角度过滤器,将现有的过滤器与您的业务逻辑包装在一起。这样您就可以从控制器中删除此逻辑并进入更贴切的领域。
    【解决方案2】:

    ng-options的过滤部分调整为如下:

    ng-options="... | filter: {billHeadShortForm: '!FEC'} | filter: {billHeadShortForm: '!FDG'}"
    

    fiddle

    不过,您可能想阅读filter documentation,并编写一个函数来避免使用管道传输两个过滤器。

    编辑:

    函数可能是这样的:

    $scope.filterBillHead = function (billHead) {
        // Exclude 'FEC' and 'FDG'
        // return true if billHeadShortForm is not in the array, false otherwise
        return ['FEC', 'FDG'].indexOf(billHead.billHeadShortForm) < 0;
    }
    

    模板:

    ng-options="... | filter: filterBillHead"
    

    updated fiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多