byr*_*rdr 7 json angularjs angularjs-orderby angular-filters
我有一个表示日历日期的JSON对象.这些是通过CMS添加的,我希望能够根据日期过滤它们.我的架构设置使得这比我想象的更难.是否可以在此JSON对象中订购日期值或是否有过滤器解决方法?
这是我的JSON对象:
{
"_id" : ObjectId("53f252537d343a9ad862866c"),
"year" : {
"December" : [],
"November" : [],
"October" : [],
"September" : [],
"August" : [],
"July" : [
{
"day" : "21",
"title" : "Event Title",
"summary" : "Event Summary",
"description" : "oEvent Description",
"_id" : ObjectId("53f252537d343a9ad862866d")
}
],
"June" : [],
"May" : [],
"April" : [],
"March" : [],
"February" : [],
"January" : []
},
"__v" : 0
}
Run Code Online (Sandbox Code Playgroud)
这是我的视图,它已经使用自定义过滤器按月过滤.orderBy没有运行,但我把它留作占位符来显示我想要设置功能的位置.
<div class="calDynamic" data-ng-repeat="n in [] | range:100">
<div ng-repeat="cal in calendar[n].year | filterKey:month">
<div ng-if="cal != '' ">
<div class="calendar">
<div ng-repeat="item in cal | orderBy: 'key.day' ">
<a href="/events/{{item.day}}">
<article class="eventslist">
<div class="numberedDate">
<h3>{{item.day}}</h3>
</div>
<div class="calInfo">
<h5>{{item.title}}</h5>
<p>{{item.summary}} <a>more</a></p>
</div>
</article>
</div><!-- ng-repeat val,key -->
</div><!-- calendar -->
</div><!-- ng-if cal -->
</div><!-- ng-repeat cal -->
</div><!-- calDynamic -->
Run Code Online (Sandbox Code Playgroud)
Cas*_*mer 16
您应该能够定义一个自定义排序函数,该函数按对象中的任何项进行排序.关键是将对象转换为过滤函数中的数组.
这是一个例子:
app.filter('orderByDayNumber', function() {
return function(items, field, reverse) {
var filtered = [];
angular.forEach(items, function(item) {
filtered.push(item);
});
filtered.sort(function (a, b) {
return (a[field] > b[field] ? 1 : -1);
});
if(reverse) filtered.reverse();
return filtered;
};
});
Run Code Online (Sandbox Code Playgroud)
然后你会这样称呼它:
<div ng-repeat="(key, val) in cal | orderByDayNumber: 'day' ">
Run Code Online (Sandbox Code Playgroud)
请注意,您不应该val.day按照假设进行编写.
编辑:事实上,看起来你的结构实际上已经是一个数组了,所以虽然这种技术仍然可以工作,但它可能没有必要 - 它可能只是你将orderBy的参数添加到导致问题的方式.
| 归档时间: |
|
| 查看次数: |
15199 次 |
| 最近记录: |