2017-05-01 4 views
0

Meine berechneten Werte erhalten Funktion wird nie ausgeführt, wenn die VM erstellt wird, so dass der Wert, den es sollte nie zugewiesen ist.Vue.js berechneter Wert nie beim Start ausgeführt

Komischerweise wird es ausgeführt, wenn ich versuche, auf den Wert zuzugreifen, es wird nur nie ausgeführt, wenn die App startet.

Grundsätzlich sollte ich den Wert der Haut berechnen und beim Start oder wenn die Stylesheet-Verknüpfung geändert werden sollte, um die richtige Haut zu laden.

Es funktioniert gut, das Problem ist, dass es nicht beim Start ausgeführt wird. Muss ich eine Hacky-Lösung verwenden, um den Wert einmal in der gemounteten Funktion der VM zu bekommen? Oder fehlt mir hier etwas ...

computed: { 
     skin: { 
      get: function() { 
       var mySkin = "my/skin/string"; 
       if (window.localStorage.getItem("skin") === null) { 
        window.localStorage.setItem("skin", mySkin); 
        jquery("link[id='skin']").attr("href", "css/skins/" + mySkin + ".css"); 
       } else { 
        mySkin = window.localStorage.getItem("skin"); 
        window.localStorage.setItem("skin", mySkin); 
        jquery("link[id='skin']").attr("href", "css/skins/" + mySkin + ".css"); 
       } 
       var hey = this.skin; 
       return mySkin; 
      }, 
      set: function (val) { 
       window.localStorage.setItem("skin", val); 
       jquery("link[id='skin']").attr("href", "css/skins/" + val + ".css"); 
      } 
     } 
    } 

Antwort

0

Berechnete Eigenschaft ist eine Eigenschaft, die von Dateneigenschaften abhängt.

In Ihrem Fall ist es besser, IMO eine data Eigenschaft skin, und eine Methode, wie setSkin() zu schaffen, die die skin Daten Eigenschaft initialisiert, und eine andere Methode saveSkin() Ihr Eigentum in localstorage zu speichern.

Sie können dann setSkin() in mounted() Hook ausführen.

Vorlage:

new Vue({ 
    el: '#app', 
    data: { 
    skin: '' 
    }, 
    methods: { 
    setSkin: function() { 
     this.skin = ...; 
    }, 
    saveSkin: function() { // call this function when you need to save skin data into localStorage 
     window.localStorage.setItem("skin", this.skin); 
     .... 
    } 
    }, 
    mounted() { 
    this.setSkin(); // retrieve skin data from localStorage, etc. 
    } 
}); 
+0

Dies ist fast genau das gleiche wie einen berechneten Wert für die Haut mit einem Einrichter und mit einem Getter, aber mit Setter/Getter ich gesetzt haben würde und in der gleichen Funktion speichern, und der Getter gibt den aktuellen Wert zurück. Die Frage ist mehr "warum wird mein berechneter Wert beim Start nicht berechnet" und ich vermute, dass die Antwort lautet "weil nichts versucht, es zu bekommen". Ich dachte, dass berechnete Werte einmal beim Start berechnet werden, aber es scheint, dass berechnete Werte im Grunde NULL-Werte sind, bis etwas sie bekommt, was kein riesiges Problem ist, nur dass mein Setter beim Start ausgeführt werden muss, so dass ich es brauche. –

+1

@SimonHyll sieht richtig aus. – wostex

Verwandte Themen