2017-08-26 76 views
0

我的頁面中,我有一個實時圖表,每3秒更新一次 我用setInterval(function(){...},3000)來更新圖表。 但我的問題是,當我移動到另一個頁面(通過JavaScript),除了我的間隔,每件東西都被銷燬,所以當我回到圖表頁面時,它再次加載每一件事情,並且setInterval方法每3秒鐘工作兩次,這使得重複點在畝圖上。如何銷燬當前頁面的所有數據

這是破壞方法 每一行的工作除了myInterval當我去到另一個網頁,然後回一個

destroy() 
    { this.num=0; 
     this.c=0; 
     this.startLive = false; 
     clearInterval(this.myInterval); } 

我的問題只是出現。

<template> 
    .... 
</template> 
<script> 
    var charts = []; 
    export default { 
     data() { 
      return { 
       startLive: false, 
       num: 0, 
       c: 0, 
       myInterval: null, 
      } 
     }, 
     methods: { 
      initChart(dataProvieded) { 
       charts[this.num] = AmCharts.makeChart("chart" + this.num, {...}); 
      }, 
      loadInitalData(limit) { 
       this.fetchDatafromServer(limit).then((response) => { ... 
        this.initChart(data); 
        this.num++; 
        this.setInt(); 
       }); 
      }, 
      setInt() { 
       this.myInterval = setInterval(function() { .... } , 3000); 
      }, 
     } 
     destroy() { 
      this.num = 0; 
      this.c = 0; 
      this.startLive = false; 
      clearInterval(this.myInterval); 
     } 
</script> 
+0

是的,'clearInterval'是使用的正確函數。但顯然,它要麼沒有找到你的'this.myInterval',要麼是其他東西再次啓動間隔。我猜它沒有找到它。但只有這段代碼,並不容易。這個函數的作用範圍是什麼?在何處以及如何定義'this.myInterval'?如果你做'this'的'console.log'和'this.myInterval'(應該是一個數字),你會得到什麼?如果可以的話,請提供一個我們可以自己重現問題的最小例子。 – blex

+0

@blex我希望我添加的內容會讓感覺更加清晰 – Haifa

+0

您可以在示例中顯示一些調用'destroy()'的代碼。 「通過javascript移動到另一頁」是什麼意思? – cepharum

回答

0

很奇怪,嘗試設置debugger;前clearInterval檢查變量。順便說一下,不是所有的代碼路徑都可以(看起來像是初始化的兩倍)。

你應該改寫爲

if (this.myInterval !== null) { 
    clearInterval(this.myInterval); 
    this.myInterval = null; 
} 

,並添加在SETINT相應後衛:

setInt() { 
    if (this.myInterval === null) { 
     this.myInterval = setInterval(function() { .... } , 3000); 
    } 
} 

您可能需要每一個圖表間隔,請檢查你的邏輯。