ras*_*cio 14 angularjs angularjs-ng-repeat
我正在使用AngularJs,并在模板中对哈希对象的属性进行排序时遇到了问题.
我的目标是:
function TestCtrl($scope){
$scope.week = {'MONDAY': ['manuel'], 'TUESDAY': [], 'WEDNESDAY': ['valerio'], 'THURSDAY': ['manuel', 'valerio'], 'FRIDAY': []}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试在模板中打印这些值时:
<div ng-repeat="(day, names) in week">
<span>{{day}}</span>
<ul> <li ng-repeat="name in names">{{name}}</li> </ul>
</div>
Run Code Online (Sandbox Code Playgroud)
印刷日期的顺序不同: FRIDAY MONDAY THURSDAY TUESDAY WEDNESDAY
我试图应用过滤器,orderBy但我认为它不适用于对象,但只是与数组...
我怎么订购?
Alw*_*ner 20
根据AngularJS docs(版本1.3.20):
您需要知道JavaScript规范没有定义它将返回对象键的顺序.为了确保密钥的确定性顺序,Angular版本(包括1.3)按字母顺序对密钥进行排序.
解决方法是使用一组键:
function TestCtrl($scope){
$scope.week = {
'MONDAY': ['manuel'], 'TUESDAY': [],
'WEDNESDAY': ['valerio'], 'THURSDAY': ['manuel', 'valerio'],
'FRIDAY': []}
$scope.weekDays = ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"];
}
Run Code Online (Sandbox Code Playgroud)
在视图中使用数组进行迭代:
<div ng-repeat="day in weekDays">
<span>{{day}}</span>
<ul> <li ng-repeat="name in week[day]">{{name}}</li> </ul>
</div>
Run Code Online (Sandbox Code Playgroud)
从AngularJS 1.4.6版文档更新:
版本1.4删除了字母排序.我们现在依赖浏览器在运行时返回的顺序
for key in myObj.
没有办法像这样订购哈希对象.不仅仅是角度,而是一般的javascript.
我会将哈希对象转换为对象数组,类似于:
$scope.week = [{day: 'MONDAY', names: ['manuel']}, {day: 'TUESDAY', names: []} ...];
Run Code Online (Sandbox Code Playgroud)
然后将视图更改为:
<div ng-repeat="day in week|orderBy:'day'">
<span>{{day.day}}</span>
<ul> <li ng-repeat="name in day.names">{{name}}</li> </ul>
</div>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29584 次 |
| 最近记录: |