我有一个自定义过滤器在ng-repeat中工作。 ng-repeat中的项目来自名为firebase的BaaS。
我试图让用户按日期(3天,7天等)过滤事件。我为此编写了一个自定义过滤器,它可以处理虚拟数据here。
现在我试图通过$ asArray(来自firebase)的虚拟事件数据来做这件事。
我收到错误""错误:项目未定义"。据我了解,这是因为过滤器和ng-repeat试图在数据加载之前调用它。
我猜我的过滤器需要一些逻辑,如果items === undefined
,请等到它加载。我不知道如何写逻辑来做到这一点。我已经尝试过$ timeout但无法让它工作。
这是过滤器部分:
.filter('upComing', function() {
// if (items === undefined){
// WAIT UNTIL it loads!
return function(items, field, days){
var timeStart = Date.now();
var timeEnd = Date.now() + (days * 86400000); // 1 day in ms
return items.filter(function(item){
return (item[field] > timeStart && item[field] < timeEnd);
});
答案 0 :(得分:3)
只需编写过滤器,以满足第一个未定义的参数。
e.g。
.filter('upComing', function() {
return function(items, field, days){
var timeStart = Date.now();
var timeEnd = Date.now() + (days * 86400000); // 1 day in ms
return (items || []).filter(function(item){
return (item[field] > timeStart && item[field] < timeEnd);
});
Angular将在每个摘要上调用您的过滤器,其中包括页面首次加载时,在数据从数据库异步加载之前。因此,如果首先没有加载数据,那么所有代码都需要正常工作。 || <default value>
和if (!param) return;
是您的朋友。