2017-03-06 45 views
0

我已经实现在angularjs应用定时器功能如下定时器:实现与angular2

$timeout($scope.startFilling, 30000) 
    $scope.onTimeout = function(){ 

     $scope.counter1--; <= counter1 is initialized to 3 
     mytimeout = $timeout($scope.onTimeout,1000); 

     if($scope.counter1==0){ 
      $timeout.cancel(mytimeout); 
      $scope.counter1=0 
     } 
    } 

    var mytimeout = $timeout($scope.onTimeout,1000); 

我基本上调用一个函数,30秒后,计数器变为30对0和0我取消定时器。

我试图实现它在angular2如下:

start(){ 

     let timer = Observable.timer(3000,1000); 
     this.myCounter = timer.subscribe(t=> this.startFilling(t)); 

    } 

    startFilling(counter){ 

     this.counter1=--counter; 
     if(this.counter1==0){ 

     this.myCounter.unsubscribe(); 
    } 

    } 

但是,这并不完全正确的工作。我绑定counter1(初始化为3)在我的模板上。 start()功能被称为按钮点击,并且一旦被调用,我想将计数器1从3减少到0,3秒后我想调用startFilling()函数。我该怎么做?

+0

this.myCounter.unsubscribe()应取消定时器?应该吗? 最新问题 –

+0

我了解取消订阅部分,但计数器值(我在模板上显示的计数器1)未被正确处理。我已经初始化为3,我期望它下降到0,然后结束。 – Nitish

+0

可以创建plunkr或东西? –

回答

1

从计数器减去一个,取消订阅,当它到达0:

tickerFunc(tick){ 
    this.counter1 = this.counter1 - 1; 

    if(this.counter1==0){ 

     this.counter.unsubscribe(); 
    } 
    } 

Demo

+0

感谢这工作! – Nitish

0

该计数器为0,因此您将counter1设置为-1,然后为0.在订阅中,每次在计数器1上递减1可能更容易。

+0

你可能会展示代码片段如何提示它?这是我试过的:http://plnkr.co/edit/TV24p7PdLK7JPdZq3fZ1?p=preview – Nitish