在Angularjs中按键值对象排序

时间:2015-02-19 14:20:42

标签: angularjs

我有一个由Angular中的键/值对象填充的选择。

$scope.event_types = {
  "CASE_STATE_CHANGE": "Case state change",
  "NEW_ISSUE": "New Issue",
  "CASE_REVERT": "Case Revert".......}

但是,当我执行订单时,它不起作用。

<select
     class="form-control"
     name="chase2"
     id="chase2"
     ng-model="eventTypeFilter"
     ng-change="updateEventFilterInput(eventTypeFilter)"
     ng-options="key as value for (key , value) in event_types | orderBy:'value'">

这种阵列有可能吗?

1 个答案:

答案 0 :(得分:1)

您无法对对象进行排序。在大多数系统上,它将按字母顺序排序。如果你想控制元素的呈现顺序,你应该使用数组来保证排序。

您可以执行以下操作:

   var events_array = Object.keys(event_types)
                            .map(function (key) { return {key: key, value: event_types[key]} })
                            .sort(function(a,b) { return a.key < b.key; } );

然后在ng-options上使用events_array,如:

<select ng-model="eventTypeFilter" 
ng-options="event.key as event.value for event in events_array"></select>

这是jsfiddle(需要打开控制台查看输出)

PS:您应该考虑对控制器上的值进行排序,然后分配给视图,因为它比在视图上排序更有效