2016-07-12 76 views
0

我正在使用Angular指令来对表行进行orderBy操作,并将数据作为来自服务的对象数组传递。AngularJS orderby不能按预期工作

<tr ng-repeat="album in vm.albums | orderBy: album.data.title"> 

    <td>{{album.data.title}}</td> 
    <td>{{album.data.date}}</td> 
    <td>{{album.data.type}}</td> 
    <td>{{album.data.username}}</td> 
</tr> 

这里是我的vm.albums阵列的样子:

vm.albums ---> [>Object1, >Object2, >Object3......] 

而且每个对象看起来像FOLL:

Object1 ---> {slug: "my-title", data: Object} 
Object2 ---> {slug: "beta-title", data: Object} 
Object3 ---> {slug: "alpha-title", data: Object} 

和对象Object1.data或任何物体vm.albums阵列看起来如下:

Object1.data ---> {title: "My Title", date: "2015-04-06", type: "Blue", username: 'rust'} 
Object2.data ---> {title: "Beta Title", date: "2012-04-07", type: "Orange", username: 'badname'} 
Object3.data ---> {title: "Alpha Title", date: "2013-09-06", type: "Lemons", username: 'xerox'} 

我仍然没有得到正确的排序<td>在我的表中使用我使用的orderBy。不知道我做错了什么。任何线索?

+0

如果塞是一样的data.title为什么不能你只是做排序依据:album.slug?我认为这可能会更好,因为我的猜测是角度orderBy不适用于嵌套属性,除非您为其编写自定义函数 – labago

+0

已更新我的帖子。所有的slu will将会不同。数组中的每个对象都有不同的数据。这是一个对象数组。 – noobcoder

+0

而不是'| orderBy:album.data.title'尝试'| orderBy'data.title'' –

回答

1

尝试

<tr ng-repeat="album in vm.albums | orderBy: 'data.title'"> 
    <td>{{album.data.title}}</td> 
    <td>{{album.data.date}}</td> 
    <td>{{album.data.type}}</td> 
    <td>{{album.data.username}}</td> 
</tr> 
4

看一看https://docs.angularjs.org/api/ng/filter/orderBy

你应该通过不变量的表达式

返回包含从指定集合中的项的阵列,通过基于使用计算出的值的比较器功能有序表达式谓词。

angular.module('myApp', []) 
 
    .controller('myController', function($scope) { 
 
    $scope.vm = { 
 
     albums: [{ 
 
     slug: "m", 
 
     data: { 
 
      title: "My Title", 
 
      date: "2015-04-06", 
 
      type: "Blue", 
 
      username: 'rust' 
 
     } 
 
     }, { 
 
     slug: "m", 
 
     data: { 
 
      title: "Beta Title", 
 
      date: "2012-04-07", 
 
      type: "Orange", 
 
      username: 'badname' 
 
     } 
 
     }, { 
 
     slug: "m", 
 
     data: { 
 
      title: "Another Title", 
 
      date: "2015-04-06", 
 
      type: "Blue", 
 
      username: 'rust' 
 
     } 
 
     }, ] 
 
    } 
 

 
    })
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="myApp" ng-controller="myController"> 
 
    <table> 
 
    <tbody> 
 
     <tr ng-repeat="album in vm.albums | orderBy: 'data.title'"> 
 
     <td>{{album.data.title}}</td> 
 
     <td>{{album.data.date}}</td> 
 
     <td>{{album.data.type}}</td> 
 
     <td>{{album.data.username}}</td> 
 
     </tr> 
 
    </tbody> 
 
    </table> 
 
</div>

+0

是的。谢谢。你的回答也是正确的。我想,埃琳娜先回答了它。但我已经提出了你的答案。这是有帮助的:) – noobcoder