2016-12-14 2 views
0

Ich versuche eine einfache Formularvalidierung mit Laravel 5.3 und Vue.js durchzuführen.Vue.js legt keine Daten fest

Laravel Controller:

public function test(\Illuminate\Http\Request $request) 
    { 
     $this->validate($request, [ 
      'name' => 'required', 
      'date' => 'required' 
     ]); 
... 
    } 

Vue Daten:

let app = new Vue({ 
     el: '#app', 

data: { 
     submitted: false, 
     errors: [], 
     post: { 
       name: '', 
       date: '', 
       }, 
}, 

Vue Beitrag:

Vue.http.post('url', post).then((response) => { 
    // form submission successful, reset post data and set submitted to true 
    app.post = { 
     name: '', 
     date: '', 
    }; 

    // clear previous form errors 
    app.$set('errors', ''); 

    app.submitted = true; 

}, (response) => { 
    // form submission failed, pass form errors to errors array 
    console.log(response.data.name); //"The Name field is required." 
    app.$set('errors', response.data); // TypeError 
}); 

Ich erhalte

TypeError: can't assign to properties of (new String("errors")): not an object

mit app.$set('errors', response.data);

Wohin gehe ich falsch?

+0

Wie sieht die Methode aus, die 'Vue.http.post' auslöst? 'Vue.http' ist für den globalen Gebrauch gedacht, da gibt es ein 'this. $ Http.post', das sich auf Vue-Instanzen bezieht, also über den richtigen Anwendungsfall nachdenken. Dieses Versprechen sieht für mich etwas komisch aus, was zweite Methode akzeptieren sollte Antwort tun? –

+0

@BelminBedak, 'this. $ Http.post' liefert die gleichen Ergebnisse. – suncoastkid

+0

Okay, was ist mit Versprechen hier? Es könnte zwei Szenarien geben: .then() 'wenn Versprechen erfüllt ist, und' .Catch() 'wenn es ein Problem gibt. Was die zweite Methode mit Parameter Response tun? –

Antwort

3

überprüfen vm.$set(object, key, value), Sie versuchen, eine Eigenschaft zu die Zeichenfolge ‚Fehler‘ response.data als Schlüssel hinzuzufügen. Die korrekte Syntax lautet app.$set(app, 'errors', response.data), aber app.errors = response.data sollte genauso gut funktionieren.

+0

Ah! Ich benutzte ursprünglich 'this ', wo das Objekt nicht benötigt wird:' this. $ Set (' errors ', response.data) 'Danke für die Klarstellung. – suncoastkid

+0

Both ['this. $ Set' und' Vue.set'] (https://github.com/vuejs/vue/blob/dev/src/core/observer/index.js#L191) (sie sind gleich sache) erfordern, dass das Zielobjekt als erster Parameter übergeben wird. –

+0

Sie haben Recht ... sieht so aus, als wäre v0.12 'obj. $ Set (Schlüssel, Wert)' http://012.vuejs.org/guide/best-practices.html#Adding_and_Deleting_Properties – suncoastkid

Verwandte Themen