我有一个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}} <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'?
答案 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
中的参数传入,但是如果你愿意,你可以稍后调查一下。