2016-04-04 103 views
1

我怎麼能在Angular2和飛鏢改寫這個代碼angular1:

$interval(function() { 
    if($scope.carouselIndex < $scope.showcases.length -1){ 
     $scope.carouselIndex = $scope.carouselIndex + 1; 
    } else { 
     $scope.carouselIndex = 0; 
    } 

    }, properties.delay); 

我這樣試過,但沒有奏效:

carouselIndex = 0; 
      for(int i=0; i<contents.size(); i++){ 
      if(carouselIndex < contents.length -1){ 
       setTimeout(function() { 
       carouselIndex = carouselIndex + 1; 
       }, 1000); 
      } else { 
       carouselIndex = 0; 
      } 
     } 

任何想法? 感謝

回答

0

你可以嘗試Observable.interval方法:

Observable.interval(properties.delay).subscribe(() => { 
    if (this.carouselIndex < this.showcases.length - 1) { 
    this.carouselIndex = this.carouselIndex + 1; 
    } else { 
    this.carouselIndex = 0; 
    } 
}); 

事件將達到延遲每次觸發。所以訂閱時定義的回調將被相應調用。

對於您的情況,您試圖將異步處理的同步循環與setTimeout函數混合使用。

0

可以使用Timer類這樣的:

Timer _timer; 

    someFunc() { 
    _timer = new Timer.periodic(const Duration(milliseconds: 1000 /*properties.delay*/), 
     (_) { 
     if (this.carouselIndex < this.showcases.length - 1) { 
     this.carouselIndex = this.carouselIndex + 1; 
     } else { 
     this.carouselIndex = 0; 
     } 
    }); 

    // to stop the periodic execution use 
    // _timer.cancel(); 
    }