2014-10-31 210 views
0

我有这样的代码:过滤ngOptions通过属性的属性

//sample of data. 

var combobox = new[] { 

       new { Key = 1, Value = "a[del]", isDelegate = true }, 
       new { Key = 2, Value = "b[del]", isDelegate = true }, 
       new { Key = 3, Value = "c", isDelegate = false }, 
       new { Key = 4, Value = "d", isDelegate = false }, 
       new { Key = 5, Value = "e[del]", isDelegate = true } 

      }; 

<select ng-model="selectedFilter" id="selectedFilter" 
       ng-options="item.Key as item.Value for item in ComboBox 
       track by item.Key" ng-change="loadData()"> 
    <option>--</option> 
</select> 

我想添加一个ng-if期权像这样的结果:

<select ng-model="selectedFilter" id="selectedFilter" 
     ng-options="item.Key as item.Value for item in ComboBox track by item.Key" ng-change="loadData()"> 
    <option value="item.Key" ng-if="item.isDelegate">{{item.Value}}</option> 
</select> 
+0

这只是一个样本。数据来自C# – AFetter 2014-10-31 04:51:36

+0

不幸的是,我不知道给ng-options一个模板的方法。 – Sacho 2014-10-31 04:52:50

+0

添加'|过滤器:{isDelegate:true}'在ng-options结尾,像这样:ng-options =“item.Key as item.Value for item in ComboBox track by item.Key | filter:{isDelegate:true}”' – aarosil 2014-10-31 04:53:27

回答

1

您可以使用过滤器

var app = angular.module('my-app', [], function() { 
 

 
}) 
 

 
app.controller('AppController', function($scope) { 
 
    $scope.condition = { 
 
    isDelegate: true 
 
    } 
 

 
    $scope.combobox = [{ 
 
    Key: 1, 
 
    Value: "a[del]", 
 
    isDelegate: true 
 
    }, { 
 
    Key: 2, 
 
    Value: "b[del]", 
 
    isDelegate: true 
 
    }, { 
 
    Key: 3, 
 
    Value: "c", 
 
    isDelegate: false 
 
    }, { 
 
    Key: 4, 
 
    Value: "d", 
 
    isDelegate: false 
 
    }, { 
 
    Key: 5, 
 
    Value: "e[del]", 
 
    isDelegate: true 
 
    }]; 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="my-app" ng-controller="AppController"> 
 
    <select ng-model="selectedFilter" id="selectedFilter" ng-options="item.Key as item.Value for item in combobox | filter:condition track by item.Key" ng-change="loadData()"> 
 
    <option value="item.Key" ng-if="item.isDelegate">{{item.Value}}</option> 
 
    </select> 
 
</div>

0

我已经完成了这个使用ng-repeat。

<select ng-model="val2" id="selectedFilter" 
        > 
       <option value="item.Key" ng-repeat="item in combobox" ng- 
    if="item.isDelegate">{{item.Value}}</option> 
      </select> 

检查Sample code

0

Filter是,如果你不希望显示与isDelegate!=真选项一个选项。

ng-options="item.Key as item.Value for item in ComboBox track by item.Key | filter: {isDelegate: true}" 

但是,如果你想显示在选择列表中为禁用该选项,使用户无法选择使用此

<select ng-model="selectedFilter" id="selectedFilter" ng-change="loadData()"> 
    <option ng-repeat="item in ComboBox" value="{{item.Key}}" ng-disabled="!item.isDelegate">{{item.Value}}</option> 
</select>