2014-03-24 100 views
0

我有一个倒计时指令,当模态警告用户他们的会话即将超时时,它将从元素中的初始值倒数到0。一旦倒计数达到零,用户将被提示使用模式退出或继续。如果他们继续下去,最终如果他们得到相同的会话到期警告模式,那么计数器就是0.我不能完全弄清楚如何重置计数器指令,而不仅仅是返回并在所有将来的警告中停止计数器指令。这是我现在的代码。重置角度倒数指令

.directive("ndCountdown", function($timeout, $compile){ 
    return{ 
     restrict: 'A', 
     link: function(scope, element, attrs){ 
      var countdown = function(){ 
       var timer = element.find('strong'); 
       for(var i = 0; i < timer.length; i++){ 
        var secs = parseInt(timer.text(), 10) - 1; 
        if(secs >= 0){ 
         timer.text(secs); 
        } else{ 
         //reset the element to the original value 
         //stop the timeout in this session but have it continue to 
         //work in future dialogs. 
        } 
       } 
       $timeout(countdown, 1000); 
      } 
      countdown(); 
     } 
    } 
}); 

回答

1

第一步是保存里面原来的变量。如果你不是最后,那么只运行超时。

.directive("ndCountdown", function($timeout, $compile){ 
return{ 
    restrict: 'A', 
    link: function(scope, element, attrs){ 
     var timer = element.find('strong'), 
      MAX = parseInt(timer.text()); 
     var countdown = function(){ 
      for(var i = 0; i < timer.length; i++){ 
       var secs = parseInt(timer.text(), 10) - 1; 
       if(secs >= 0){ 
        timer.text(secs); 
        $timeout(countdown, 1000); 
       } else{ 
        timer.text(MAX); 
       } 
      } 
     } 
     countdown(); 
    } 
} 
}); 

现在,如果您需要能够重新启动它,您可能想要从您的控制器进行通信。也许这样的广播。 一定要注入$ rootScope

$rootScope.$broadcast('event:start-countdown'); 

然后在你的指示,你在你的链接功能的末尾添加这一点,并注入$ rootScope。再次。

$rootScope.$on('event:start-countdown', function() { 
    countdown(); 
}