将对象角度组合到数组中以供过滤器使用

时间:2014-08-19 13:45:53

标签: json angularjs angular-filters

我有一个ng-repeat循环返回一个表示日历事件的对象列表。我希望能够订购日期,但看起来我首先需要将返回的对象推送到单个数组中。

这是我的角度观点:

<div class="calendar">

<p>{{cal}}</p>
<div ng-repeat="items in cal">

        <a href="/events/{{items.day}}">
          <article class="eventslist">
           <div class="numberedDate">
               <h3>{{items.day}}</h3>
            </div>
            <div class="calInfo">
            <h5>{{items.title}}</h5>
               <p>{{items}}&nbsp;<a>more</a></p>
            </div>
           </article>


      </div><!-- ng-repeat items -->
</div><!-- calendar -->

项目目前正在返回:

{"day":"21","title":"ok","summary":"ok","description":"ok","_id":"53ee9f0fc6aed109c6d33cfd"}
{"day":"2","title":"ok","summary":"ok","description":"ok","_id":"53ee9f038782309c6d892"}
{"day":"27","title":"ok","summary":"ok","description":"ok","_id":"533240fc6ae32433chd"}

有没有办法将这些返回的对象包装到数组[]中,以便它们可以在它们上面调用orderBy'day'?

1 个答案:

答案 0 :(得分:1)

如果您只需要将项目放入数组中,则以下循环将执行此操作:

var arr = [];
angular.forEach(items, function (item) {
    arr.push(item);
});

我知道你的数据结构复杂,所以你可能需要几个循环来拉出你需要的对象并展平数组。

一旦您的数据结构化,那么下面的代码将起作用。只要你正确获得ng-repeat参数,它就会处理一个数组或一个对象。 (我已经在阵列上测试了它):

myApp.filter('orderByDayNumber', function () {
    return function(items, field, reverse) {
        var filtered = [];
        angular.forEach(items, function (item) {
            filtered.push(item);
        });
        filtered.sort(function (a, b) {
            return (parseInt(a[field]) > parseInt(b[field]) ? 1 : -1);
        });
        return filtered;
    };
});

请注意sort函数中的parseInt调用。我实际上已经看到一个函数作为ng-repeat中的参数传入,但是如果你愿意,你可以稍后调查一下。

无论如何,Here is a working demo jsFiddle