2017-09-21 4 views
0

Ich habe die Einrichtung einen Speicher in vue.js lesen und die Zustandsparameter in dem berechneten Teil eines compoenent zugreifen:

computed: { 
    BASE_URL() { 
    return this.$store.state.BASE_URL; 
    } 

aber wenn ich versuche, Shop in den Verfahren der gleichen Komponente zuzugreifen:

methods: { 

    register: function() { 
      axios.post(this.BASE_URL + "/web/register", { 
      username: this.username, 
      password: this.password, 
      email: this.email 
     }).then(function(data){ 
      this.$store.commit('saveToken', data.token); 
      console.log('token is set to:', this.$store.state.token) 
     }); 
    } 
}, 

ich diesen Fehler an der Konsole:

Uncaught (in promise) TypeError: Cannot read property '$store' of undefined 

ich habe versuchte auch $store ohne this, aber erhalten Sie den gleichen Fehler.

Was ist hier falsch? Wie kann ich es reparieren?

+0

Haben Sie vuex in Ihrer Anwendung registriert? 'Vue.use (Vuex)' – IzumiSy

+0

Ja, tat ich. Wie ich bereits sagte, ist der Vuex im "berechneten" Teil der Komponente zugänglich, aber nicht im Versprechen der Methode. – Karlom

Antwort

4

Sie verwenden eine JavaScript-Funktion anstelle einer Pfeilfunktion. Versuchen Sie es und es sollte funktionieren.

methods: { 
    register() { 
      axios.post(this.BASE_URL + "/web/register", { 
      username: this.username, 
      password: this.password, 
      email: this.email 
     }).then((data) => { 
      this.$store.commit('saveToken', data.token); 
      console.log('token is set to:', this.$store.state.token) 
     }); 
    } 
+0

Fantastisch. Dies hat das Problem gelöst. Aber warum kann ich Vanille JS nicht im Versprechen verwenden? – Karlom

+2

function haben ihre eigene "this" -Instanz, also wenn Sie dies aufrufen, erhalten Sie die Instanz der Funktion in Ihrem Inneren und nicht die vue-Instanz. Die typische Lösung dafür in Vanille Javascript ist eine temporäre Variable außerhalb der Funktion zu erstellen, dann verwenden Sie es innerhalb der Funktion. z.B. var self = dies; register: function() { self. $ Store.commit(); } –

+1

FYI, Pfeilfunktionen sind auch * "Vanille" * JavaScript. – Phil

Verwandte Themen