自定义指令中的自定义过滤器不从父作用域获取异步数据

时间:2014-04-17 20:44:39

标签: angularjs angularjs-directive angularjs-filter

我有一个自定义指令,用于创建事件列表,由自定义过滤器“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”,现在它正常运行。

0 个答案:

没有答案