我有一个自定义指令,用于创建事件列表,由自定义过滤器“DateRange”过滤,用于检查日期范围内的事件。过滤器中使用的开始日期和结束日期的范围限定为自定义指令,而事件来自父范围。
这是我的自定义指令
myApp.directive('eventList', function () {
return {
restrict: 'A',
replace: true,
template: '<div data-ng-repeat="event in events | DateRange:start:end ">'+
'<div class="lead" data-ng-bind-html="event.Title"></div>'+
'<div class="lead" data-ng-bind-html="event.Description"></div>'+
'</div>',
scope: {
start: '=',
end: '=',
events: '='
}
}
});
以下是标记:
<div data-event-list=""
data-events="events"
data-start="'2014-5-1 00:00:00'"
data-end="'2014-5-1 23:59:59'">
</div>
以下是自定义过滤器:
.filter('DateRange', function () {
return function (events, startDate, endDate) {
var results = [];
// some logic
return results;
}
});
事件列表在控制器中使用$ http.get填充,并通过$ scope.events传递。
当我签入firebug时,我可以看到自定义过滤器在每次使用$ http调用检索数据时都不会获取“事件”数据,这是异步的。当$ http服务尝试检索数据时,将调用自定义过滤器。我决定尝试实现一个promise(很可能是错误的)但是在对自定义过滤器进行角度检查后仍然会调用获取数据,因此过滤器总是会获得一个未定义的事件对象。
以下是承诺在控制器中的显示方式:
$scope.events = [];
$EventsSrv.getData().then(function (promise) {
$scope.events = promise.data;
});
我发现了类似的问题here,但是当我实现它时,过滤器进入循环并在达到10 x限制后中止。
我很感激如何使这项工作得到帮助。
更新:我解决我的问题。它不是异步调用,而是过滤器中的Date.parse()函数,它不是按以下格式解析日期:“2014-5-1 0:00:00”。这就是为什么当我最初发布问题时我说它在Chrome中工作但不是FF或IE。我将格式更改为“2014/5/1 0:00:00”,现在它正常运行。