AngularJS NG-重复如何排序依据的对象的对象吗? [英] AngularJS ng-repeat how to orderBy for object of objects?

查看:100
本文介绍了AngularJS NG-重复如何排序依据的对象的对象吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我从服务器这样的回应:

I have a response from the server like this:

0: {
    0: {
        category: "value1",
        date: "date",
        id: 100,
        title: "MyTitle",
        edituser: "user1",
    }
    hashKey: "02G",
    _proto:{
        //not important,
    }
},
1: {
    1: {
        category: "value2",
        date: "date",
        id: 101,
        title: "MyTitle2",
        edituser: "user2",
    }
    hashKey: "02H",
    _proto:{
        //not important,
    }
},

这就需要在列表中显示这样的

which need to be shown in a list like this:

<tr ng-repeat="news in newsList[currentPage] | orderObjectBy:sortingOrder:reverse">
        <td>{{news[$index].id}}</td>
        <td>{{news[$index].title}}</td>
        <td>{{news[$index].category}}</td>
        <td>{{news[$index].edituser}}</td>
        <td>{{news[$index].date}}</td>
    </tr>

它显示就好了,但排序不精。使用普通的排序依据不会这么做,所以我创建这样的自定义过滤器(在CoffeeScript中):

It shows just fine, but the ordering is not fine. Using normal orderBy won't do it, so I created a custom filter like this (in coffeescript):

app.filter "orderObjectBy", ->
(items, field, reverse) ->
    filtered = []
    angular.forEach items, (item) ->
        filtered.push item

    filtered.sort (a, b) ->
        a[field] > b[field]

    filtered.reverse()  if reverse
    filtered

但仍不会进行排序,请问有什么解决方案进行排序那种响应对象的角度?

but still it won't sort, is there any solution to sort that kind of response object in angular?

推荐答案

错误是在比较功能。它应该返回数。
请参阅:的https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

Mistake is in the compare function. It should return number. See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

本作品:

app.filter('orderObjectBy', () ->
    (items, field, reverse) ->
        filtered = []

        for key, item of items
            filtered.push(item)

        filtered.sort( (a, b) ->
            if a[field] > b[field]
                return 1 
            else 
                return -1
    )

        if (reverse) 
            filtered.reverse()

        return filtered

); 

这篇关于AngularJS NG-重复如何排序依据的对象的对象吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆