角度订单下拉列表选择列表

时间:2013-12-18 11:19:41

标签: angularjs

如何使用Angular在选择下拉列表中订购列表?

这是角度控制器:

var app = angular.module("app", []);

app.controller('Ctrl', function($scope, $filter, $http) {

    $scope.options= [
                  {
                    "id": 823,
                    "value": "81"
                  },
                  {
                    "id": 824,
                    "value": "77"
                  },
                  {
                    "id": 825,
                    "value": "152"
                  },         
                ];   

    });

和html:

<h4>Angular-xeditable Editable row (Bootstrap 3)</h4>
<div ng-app="app" ng-controller="Ctrl">    
   <select ng-model="test" ng-options="v.id as v.value for v in options | orderBy: value"></select>
</div>

现在订单是:81,77,152

我想:77,81,152

我怎么做?

Jsfiddle来测试

由于

2 个答案:

答案 0 :(得分:5)

您的值是字符串,因此除非您将它们转换为整数,否则它们不会自然排序。 您可以通过创建自己的过滤器或在$ scope上定义一个简单的排序函数来转换它们:

Fiddle

<select 
  ng-model="test" 
  ng-options="v.id as v.value for v in options | orderBy: naturalOrder"
></select>
$scope.naturalOrder = function(item){
  return parseInt(item.value, 10);
};

答案 1 :(得分:1)

您需要在orderBy中的字段名称周围放置单引号。 orderBy的第一个参数是一个排序表达式字符串。

in options | orderBy:'value'

您可以通过在字段名称前添加+-来指明初始排序方向,从而对此进行扩展。您还可以在排序表达式后面提供一个布尔值,以便切换排序方向。

<div ng-init="desc=true">
...
in options | orderBy:'+value':desc