2013-12-20 66 views
1

首先,我已经阅读了数以百万计的帖子,说你不应该更新Angular中Controller的DOM元素。我知道。

当试图使用角计时器指令(倒计时)。我遇到了一些问题,所以最后,在插件开发人员的帮助下,我们做了这个正在工作并符合我的要求的运动员。

http://plnkr.co/edit/CWXnKMbygVDMc8xzshZa?p=preview

然而,这种代码移动到我的应用程序的时候,我得到了一个错误,当我在$元素添加到我的控制器:

`Error: Unknown provider: $elementProvider <- $element` 

我已经看了很多帖子,我知道它可以被注入,但我不知道为什么它不适用于我的应用程序。

在另一方面,我喜欢把事情做对,所以我不喜欢的东西执行是一种不好的做法。所以,如果你有更好的方法可行,请告诉我。

+0

您是否记得在您的应用程序中注册计时器模块? ('var app = angular.module('lazy-timer',['timer'])。'并将'angular-timer.min.js'添加到您的index.html?'$ element'中时刻。 –

回答

1

长相丑陋解析DOM使用jQuery,我不明白为什么你不将ng-repeat内使用定时器指令。

这里的,只是增加了一个途径和额外的阵列范围为eleapsedTimers然后将其用ng-repeat

$scope.elapsedTimers=[]; 

$scope.$on('timer-stopped', function (data) { 
    /* loop through bookings to find one that just stopped*/ 
    var now = new Date(); 
    angular.forEach($scope.bookingsList, function (item) { 
     if (!item.elapsed) { 
      if (item.booking_date <= now) {     
       item.elapsed = true; 
       $scope.$apply(function() { 
        $scope.elapsedTimers.push(item) 
       }); 
      } 
     } 
    }); 
}); 

HTML

<div id="result"> 
    <div ng-repeat="item in elapsedTimers">ID {{item.id}} elapsed</div> 
</div> 

DEMO

注显示..这将是l将新属性elapsed添加到预订对象。如果这是一个问题,可以创建解决方法