2017-10-14 85 views
0

我有兩個控制器。一個名爲page1的頁面和另一個名爲page2的頁面。在頁面1我有一個運行動畫的代碼。我有一個無限調用自己的函數。在這一行。當我訪問另一個狀態時停止功能

.each('end',tick)當動畫結束時,它再次開始tick()。

function tick(){ 
console.log("hello"); 
. 
. 
. 
//line 190 
paths.attr('transform', null) 
.transition() 
.duration(duration) 
.ease('linear') 
.attr('transform', 'translate(' + x(now - (limit - 1) * duration) + ')') 
.each('end', tick) //when the transition ends, it start tick() again 
} 

這很好,因爲它是一個無限的動畫。我在tick函數中放了console.log(「hello」),然後每次執行這個函數時,單詞「hello」被寫入控制檯。到現在爲止還挺好 !。當我改變控制器的時候,即當我點擊去第2頁時,我以前的動畫仍在運行,我仍然可以看到第一個控制器中的函數的console.log(「hello」)。

當我更換控制器時,如何停止此功能?

這是我的代碼:

http://plnkr.co/edit/66cK7gWTNQNh4vmC2lmp?p=preview

+0

是有一些條件可以在調用'tick()'之前檢查?例如,'.each('end',function(){if(condition){tick();}})' – Nick

+0

@snapjs任何情況都沒關係 – unusuario

+0

@aaron是的,但它不適用於我。我有一個錯誤.. – unusuario

回答

1

監聽範圍受到破壞,停止你的動畫循環:

function MyController($scope) { 
    var animating = true; 
    $scope.$on('$destroy', function() { 
    animating = false; 
    }); 

    function tick() { 
    if (!animating) return; 
    console.log("hello"); 
    } 
} 

閱讀關於角的範圍$destroy事件在這裏:https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$destroy

+0

朋友我試過這個,但它對我不起作用。實際上它會導致我犯錯誤。 $ scope.on不是一個函數。是摧毀。謝謝! – unusuario

+0

@unusuario拍下即時對不起,其$'on'不是'on',我很抱歉。給出最新的答案。 –

+0

mmm。我試過了,但沒有任何反應.. http://plnkr.co/edit/2m97RvcUSQoqcqQOxgc4?p=preview這會殺死我的圖表的功能 – unusuario

相關問題