2017-08-26 7 views
0

in meiner Seite zu zerstören, habe ich eine Echtzeit-Chart, die alle 3 Sekunden aktualisiert Ich habe setInterval (function() {...}, 3000) für die Aktualisierung des Diagramms . , aber mein Problem ist, wenn ich auf eine andere Seite (durch Javascript) jedes Ding außer meinem Intervall zerstört werde, so wenn ich zurück zur Diagrammseite, laden Sie alles wieder und setInterval-Methode funktioniert alle 3 Sekunden zweimal, die doppelte Punkte macht auf mu Diagramm.Wie alle Daten der aktuellen Seite

dies Verfahren zerstören jede Zeile mit Ausnahme der myInterval arbeitet

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

mein Problem scheint nur, wenn ich auf eine andere Seite gehen dann zurück.

<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

Ja, 'clearInterval' ist die richtige zu verwendende Funktion. Aber anscheinend, es ist entweder nicht finden Sie Ihr 'this.myInterval', oder etwas anderes startet das Intervall erneut. Ich schätze, es findet es nicht. Aber mit nur diesem Codeschnipsel ist es nicht einfach zu sagen. Was ist "das" im Rahmen dieser Funktion? Wo und wie ist 'this.myInterval' definiert? Was bekommst du, wenn du 'console.log' von' this' und 'this.myInterval' (sollte eine Zahl sein) machst? Wenn Sie können, geben Sie bitte ein minimales Beispiel an, wo wir das Problem selbst reproduzieren können. – blex

+0

@blex Ich hoffe, was ich hinzugefügt habe, wird die Wahrnehmung klarer machen – Haifa

+0

Könnten Sie Code zeigen, der in Ihrem Beispiel 'destroy()' aufruft? Und was meinst du mit "über JavaScript zu einer anderen Seite wechseln"? – cepharum

Antwort

0

Es ist seltsam, versuchen debugger; zu setzen, bevor clearInterval Variablen zu überprüfen.

Übrigens sind nicht alle Codepatches in Ordnung (sieht aus wie Initialisierungen verdoppelt).

Sie sollten umschreiben als

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

und fügen Wache am setInt entsprechen:

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

Kann man ein Intervall benötigen pro Graph, geben Sie bitte Ihre Logik überprüfen.

Verwandte Themen