2017-09-18 1 views
1

Ich habe eine Situation, wo, wenn ich auf eine Route navigieren, meinen berechnete Eigenschaft Updates und aktualisiere meine Ansicht entsprechend. Wenn ich zu einer anderen Route und zurück wechsle - verliere ich alle meine Daten, die in diesem Bereich zugewiesen sind. Ich verwende created, um diese Variablen zu initialisieren, und navigiere dann zurück, um sie auf einen Null-Zustand neu zu initialisieren.Verständnis von vue-Router und Dateneigenschaften

In meinem berechneten Eigenschaft, ich bevölkern diese (erstellt Variablen) und diese werden in der Ansicht verwendet.

Meine Frage ist - ist die Reinitialisierung normal? Gehe ich das falsch?

created: function() { 
      this.abc = {}; 
    }, 
    computed: { 
     myData: function() { 
      return this.$store.state.myData; 
     }, 
     setupData: function() { 
      console.log('only update now!') 
      var myData = this.myData; 

      //doSomething that updates this.abc 
     } 
    }, 
    watch: { 
     myData: { 
      handler: function(newValue) { 
       this.setupData(newValue); 
      }, 
      deep: true 
     } 
    }, 
+0

Ja, das ist das erwartete Verhalten. Wenn Sie eine neue Komponente routen, wird diese Komponente erstellt und die Komponente der vorherigen Route wird zerstört. http://jsfiddle.net/yqtgpapd/ – thanksd

+0

@ thanksd So bin ich verwirrt. Wenn ich eine berechnete Eigenschaft habe, die sich entsprechend aktualisiert. Und dann filtere ich aus dieser Eigenschaft bestimmte Kriterien und zeige sie in der Ansicht über eine andere Variable an. Wie gehe ich dabei vor, wenn es jedes Mal gelöscht wird, aber die berechnete Eigenschaft gefüllt ist? – KingKongFrog

+0

Sie haben Ihr Problem nicht ausreichend erläutert oder nicht genügend Code ausgetauscht, um zu wissen, was Sie erwarten und was Sie tatsächlich erleben. Funktioniert die angegebene Antwort nicht für Sie? Bitte erläutern Sie – thanksd

Antwort

3

Ja, die Neuinitialisierung ist normal. Wenn Sie Ihre Komponente behalten möchten, verwenden Sie die keep-alive tag:

Wenn Sie die Switched-out-Komponenten im Speicher behalten wollen, so dass Sie können ihren Zustand erhalten oder erneutes Rendern zu vermeiden, können Sie eine dynamische wickeln Komponente in einem Element:

<keep-alive> 
    <component :is="currentView"> 
    <!-- inactive components will be cached! --> 
    </component> 
</keep-alive> 

die Dokumentation über die <router-view> auch refers to it:

Da es nur eine Komponente ist, funktioniert es mit <transition> und <keep-alive>.

+0

Dang nabit! Beat mich dazu. – Kano

+0

cello @Kano Das hat funktioniert - ein Problem, das ich sehe, ist, wenn ich zwischen den Routen wechsle, die ich anfange zu sehen, dass die Ansichten unten an einander anhängen. Hast du das jemals gesehen? Ich versuche zu sehen, ob dies ein anderer Code ist, der das verursacht, aber ich wollte nur deine Gedanken sehen. – KingKongFrog

Verwandte Themen