如何使用ng-options阻止排序?

时间:2015-07-28 14:12:46

标签: angularjs ng-options

显然ng-options正在以词法方式对我的数组进行排序。如何防止此默认行为?

这是months对象

"months": {
    "01": "January",
    "02": "February",
    "03": "March",
    "04": "April",
    "05": "May",
    "06": "June",
    "07": "July",
    "08": "August",
    "09": "September",
    "10": "October",
    "11": "November",
    "12": "December"
}

这是ng-options生成的html。

 <select ng-model="avtripExpMonth" name="avtripExpMonth" ng-options="k as v for (k,v) in months">
    <option value="?" selected="selected"></option>
    <option value="string:10" label="October">October</option>
    <option value="string:11" label="November">November</option>
    <option value="string:12" label="December">December</option>
    <option value="string:01" label="January">January</option>
    <option value="string:02" label="February">February</option>
    <option value="string:03" label="March">March</option>
    <option value="string:04" label="April">April</option>
    <option value="string:05" label="May">May</option>
    <option value="string:06" label="June">June</option>
    <option value="string:07" label="July">July</option>
    <option value="string:08" label="August">August</option>
    <option value="string:09" label="September">September</option>
 </select>

注意:这不是How to use natural sorting in ng-options的重复,因为这个问题是询问如何防止明显的默认排序行为,而不是如何导致排序。

1 个答案:

答案 0 :(得分:1)

正如其中一位评论者指出的那样,javascript对象没有订单,因此语言本身不支持我按特定顺序迭代对象属性的期望。

大多数浏览器会按照定义对象的顺序或按创建新属性的顺序迭代json对象中的属性。但是,并非总是如此。当属性键为非数字整数时,谷歌浏览器显然会保留顺序,但对于转换为整数的键则不然。以下是关于此主题的Google小组讨论:https://code.google.com/p/v8/issues/detail?id=164

另外值得注意的是,ECMAScript 6 specifies a new data structure called Map具有对象的功能,同时保留了顺序。