2017-02-21 7 views
1

Ich versuche VueJS und Axios zu verwenden, um eine HTTP-Anfrage an ein Laravel-Backend zu machen, um JSON zu erhalten und dann den JSON zu verwenden, um eine errorMessage-Eigenschaft für meine Komponente zu aktualisieren .Eigenschaft in Axios Promise in Vue JS nicht setzen

  Axios.post('/api/login', { 
       email: this.email, 
       password: this.password 
      }).then((response) => { 
       this.errorMessage = response.message; 
      }).catch((error) => { 
       console.error(error); 
      }) 

Das Problem ist, dass es nicht in der Lage ist sein this.errorMessage aus irgendeinem Grunde zu verweisen, bin ich falsch hier etwas zu tun? Ich mache korrekt die HTTP-Anfrage und die JSON-Antwort kommt genau wie erwartet zurück, wenn ich this.errorMessage it this.errorMessage es sagt, dass es undefiniert ist, obwohl ich es bereits mit Erfolg anderswo manipuliert habe ...

Hier ist der gesamte Code für diese Komponente

export default { 
    methods: { 
     submitForm: function(e) { 
      e.preventDefault(); 

      Axios.post('/api/login', { 
       email: this.email, 
       password: this.password 
      }).then((response) => { 
       debugger; 
       this.errorMessage = response.data.message; 
      }).catch((error) => { 
       console.error(error); 
      }); 
     } 
    }, 
    data: function() { 
     return { 
      errorMessage: null, 
      email: null, 
      password: null 
     } 
    }, 
    components: { 
     'error': Error 
    } 
} 

LÖSUNG:

die ursprüngliche Anforderung richtig, Fett Pfeil Funktionen ist, sollte den Wert von this halten, war das Problem mit Chrome Debugger, die die Werte zeigten zu mir als undefined sogar th Obwohl sie nicht ... Sorry für die dumme Frage, ich hoffe, dass dies anderen Menschen helfen wird, über diese Art von Problem zu kommen.

+0

Es ist ein Kontextproblem. Zeige etwas mehr Code. –

+0

@ JonatasWalker Ich habe die Frage mit dem gesamten Code für diese bestimmte Komponente aktualisiert. –

+0

Mögliches Duplikat von [Vue axios promise scope ist nicht an die aktuelle Komponente gebunden] (https://stackoverflow.com/questions/41754346/vue-axios-promise-scope-is-not-binding-to-current-component) –

Antwort

6

Axios.post nähere Funktion so Eigenschaft definieren, innerhalb es wie privat bei näherer Funktion aussieht.

Sie haben Variable zu definieren außerhalb näher wie folgt aus:

//this will pick your data. 
let self = this; 


Axios.post('/api/login', { 
    email: this.email, 
    password: this.password 
    }).then((response) => { 
    self.errorMessage = response.message; 
      }).catch((error) => { 
       console.error(error); 
      }) 

Auch wenn response.message ist nicht definiert dann response.body.message verwenden oder die Rückkehr Variable aus Laravel.

+0

Yup. das ist es @MandeepGill danke :) Aus irgendeinem Grund sagt der Debugger in Chrome immer wieder, dass es "undefined" ist, wenn ich über 'self.errorMessage' schwebe und das mich komplett abwarf, weil ich das vorher tatsächlich versucht hatte. Aber obwohl Chrome sagt, es sei "undefiniert", funktioniert es trotzdem. –

+0

Sie begrüßen @ JoãoSerra –

+0

Es könnte möglich sein, Sie haben einen Cache, in Chrome gibt es Netzwerk-Registerkarte in den Entwicklertools öffnen Sie diese Registerkarte überprüfen Cache deaktivieren und Entwickler-Tools geöffnet dann aktualisieren und lassen Sie mich wissen, wenn dieses Problem noch ist. –

0

Die Daten der Antwort ist unter der data Eigenschaft zur Verfügung:

this.errorMessage = response.data.message; 
+0

Hallo Joseph, das Problem ist die 'this.errorMessage', die undefiniert ist, also setzt sie eine Zeichenkette auf undefiniert, also tut sie überhaupt nichts. Ich weiß nicht genau, warum diese.errorMessage nicht definiert ist, da ich fette Pfeilfunktionen verwende ... ich könnte hier mit etwas verwirrt sein. –

+0

@ JoãoSerra - es ist "undefiniert" weil 'response.message' nicht definiert ist. Verwenden Sie stattdessen "response.data.message". –

+0

Ich tat, ich benutze den 'Debugger', um die Werte zu überprüfen, es ist nicht mehr undefiniert, aber das Problem bleibt, wie ** Jonatas Walker ** bemerkte, dass es ein Kontexthema ist, ich bin nur nicht ganz sicher, wie ich kann repariere es. –

Verwandte Themen