在Angularjs中显示独特的下拉选项

时间:2014-02-03 11:19:05

标签: javascript angularjs angularjs-directive angularjs-ng-repeat

我有一个下拉列表,工作正常

                     <select class="form-control" ng-model="cc.id">
                       <option value="">Chose Id</option>
                       <option ng-repeat="account in accounts |unique:'id'" value="{{account.id}}">{{name.id}}</option>
                       </select>

它在下拉列表中为我提供了以下选项

          101
          101
          119
          120
          121
          121

虽然它应该只显示选项中的唯一ID ...

       101
       119
       120
       121

帐户由jason数组帐户组成 act_id(主键) ID FNAME L-NAME 位置

您能告诉我如何修复ID上的唯一过滤器,以便它只显示唯一值谢谢

3 个答案:

答案 0 :(得分:2)

我会使用Underscore库中的uniq方法。

然后写一行:

$scope.new_accounts = _.uniq(accounts, false, function(p){ return p.id; });

演示 Fiddle

参考:

  

uniq_.uniq(array,[isSorted],[iterator])别名:唯一   生成数组的无副本版本,使用===来测试对象相等性。如果您事先知道数组已排序,则为isSorted传递true将运行更快的算法。如果要根据转换计算唯一项,请传递迭代器函数。

_.uniq([1, 2, 1, 3, 1, 4]);
=> [1, 2, 3, 4]

答案 1 :(得分:1)

根据this AngularJS没有唯一的过滤器 - AngularUI。

以上链接中的以下代码应该有所帮助:

app.filter('unique', function() {
    return function(input, key) {
        var unique = {};
        var uniqueList = [];
        for(var i = 0; i < input.length; i++){
            if(typeof unique[input[i][key]] == "undefined"){
                unique[input[i][key]] = "";
                uniqueList.push(input[i]);
            }
        }
        return uniqueList;
    };
});

此外,您可以使用以下内容:

<select ng-model="accounts" ng-options="c.name for c in accounts"></select><br>

用于选择。

答案 2 :(得分:0)

AngularUI正是你所需要的,'唯一'过滤器。

示例:

ng-options="color in colors | unique:'name'"