2016-02-04 21 views
3

我使用$ interval在第一個控制器中運行某個函數。在重定向到第二個控制器之後,還有$ interval註冊的函數(在第一個控制器中實現)正在運行。我想停止$ interval服務而不使用destroy函數。

回答

3

Note:當您完成這些服務時,由此服務創建的間隔必須明確銷燬 。特別是當銷燬控制器的作用域或指令的 元素時,它們不會自動銷燬。您應該考慮到這一點,並確保在適當的時候始終取消間隔。有關如何以及何時執行此操作的更多詳細信息,請參閱下面的示例 。

您可以使用cancel方法來清除$interval對象。您應該在離開控制器時取消interval

爲此,您需要在$scope$destroy事件中添加eventListener事件,您可以執行清理操作(例如,取消間隔對象,取消超時對象)。

代碼

var myInterval = $interval(function(){ 
    //your interval code 
}, 1000) 

//register this listener inside your controller where the interval belongs. 
$scope.$on('$destroy', function(){ 
    $interval.cancel(myInterval) 
}); 

Sample Plunkr

+0

我想在哪裏使用ClearInterval?它在第二個控制器還是第一個控制器? – jana91

+0

在這種情況下,您應該在同一個控制器 –

2

添加間隔變量在rootScope。然後在第二個控制器中將其取消,如下所示。

第一個控制器

$rootScope.stopInterval = $interval(function(){ 
    //code goes here 
}, 1000); 

第二個控制器

$interval.cancel($rootScope.stopInterval); 

注意:只有在這種情況下,缺陷是你需要停止它在你之後第一個控制器使用的控制器,但是可靠的。

+0

中使用上面的代碼,使用$ rootScope,因爲這是糟糕的代碼風格。 Angular-way是使用自定義服務。 –