AngularJS:数组上的orderBy不起作用

时间:2016-03-15 23:09:05

标签: arrays angularjs angularjs-orderby

我正在尝试订购我在前端展示的列表。这是json我从我的角度控制器传递它:

My Json Sample here

我正在传递一个填充了一些数组的数组。

我想通过internalRanking来排序列表,我可以创建一个字符串或int,但它不会总是相同的长度。我试过在网上看,但我不认为我需要创建一个自定义过滤器,因为它迭代包含一些上述数组的数组。我的HTML是:

<form class="form-inline">
  <input ng-model="query" type="text" placeholder="Filter by" autofocus>
</form>
<ul ng-repeat="rankingData in allRankingData | filter:query | orderBy:allRankingData[0].entries[0].internalRanking">
  <li>{{index}}</li>
  <li>{{rankingData[0].entries[0].playerOrTeamName}}</li>
  <li>{{rankingData[0].tier}} {{rankingData[0].entries[0].division}} - {{rankingData[0].entries[0].leaguePoints}}LP</li>
  <li>{{rankingData[0].entries[0].internalRanking}}</li>
</ul>

它只是没有订购任何东西。

的最后一个清单行
{{rankingData[0].entries[0].internalRanking}}

打印出正确的值,以便引用正确。

有没有人有任何想法?如有必要,我可以发布更多代码

2 个答案:

答案 0 :(得分:2)

这是一个有用的JSFiddle来帮助您举个例子。浏览代码并观察orderBy的使用方式。另外,观察如何进行嵌套。

&#13;
&#13;
var myApp = angular.module('myApp', []);

myApp.controller('myCtrl', function($scope) {

    $scope.people = [{
        "name": "Bob Jones",
        "scores": [
		{date:"01/10/2010",value:40},
		{date:"01/10/2014",value:41},
		{date:"01/10/2011",value:43},
		{date:"01/10/2014",value:49}
		]
    },{
        "name": "Adam Johnson",
        "scores": [
		{date:"01/10/2013",value:39},
		{date:"01/10/2015",value:31},
		{date:"01/10/2013",value:32},
		{date:"01/10/2011",value:21}]
    },{
        "name": "Mary Hills",
        "scores": [
		{date:"01/10/2014",value:92},
		{date:"01/10/2014",value:73},
		{date:"01/10/2013",value:89},
		{date:"01/10/2011",value:88}]
    }];


});
&#13;
<div ng-controller='myCtrl'>
    <ul ng-repeat="person in people">
        <li>{{person.name}}</li>
        <ul ng-repeat="score in person.scores | orderBy:'date'">
            <li>{{score.date}}:{{score.value}}</li>
        </ul>
    </ul>
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以拥有订购功能......

ng-repeat="rankingData in allRankingData | filter:query | orderBy:orderByFn"

$scope.orderByFn = function(item) {
   return item.entries[0].internalRanking;       
};