2017-08-26 30 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); 
    } 
} 

您可能需要每一个图表间隔,请检查你的逻辑。