2017-08-09 1 views
0

Ich habe folgendes Element:Vue.js 2-Wege-Daten binden arbeiten nur einen Weg

<input type="text" v-model="selectedPost.title" v-bind:value="selectedPost.title"> 

und ich habe folgendes Vue.js App:

var vueapp = new Vue({ 
    el: '#app', 
    data: { 
      selectedPost: {} 
     } 
}); 

Wenn ich etwas auf Typ der Eingang wird das Vue Modell aktualisiert, kann ich sehen, es unning dies in meiner Browser-Konsole:

vueapp.$data.selectedPost.title 

den Wert in dem Textfeld eingegeben zurück. Alles gut.

Aber .. wenn ich dies tun:

vueapp.$data.selectedPost.title = "changed"; 

Die Textbox aktualisiert nicht mit dem zugewiesenen Wert.

Warum? Wie funktioniert es?

Diese jsfiddle zeigt das Problem passiert: https://jsfiddle.net/raphadko/3fLvfea2/

+0

Könnten Sie ein vollständiges Skriptbeispiel erstellen, damit es einfacher für uns ist, zu debuggen? – Antony

+0

Nicht in der Lage, dieses Problem zu reproduzieren: https://jsfiddle.net/oa0o3rf2/ – thanksd

+0

aktualisiert mit einem jsfiddle – raphadko

Antwort

2

Das Verhalten, das Sie sehen, ist, weil Vue cannot detect Eigenschaften zu Objekten hinzugefügt nach der Vue initialisiert wurde, wenn Sie sie $set mit hinzufügen. Initialisieren Sie in diesem Fall einfach die Titeleigenschaft.

var vueapp = new Vue({ 
    el: '#app', 
    data: { 
      selectedPost: {title:''} 
     } 
}); 

Aktualisiert fiddle.

+0

Wäre das für Unter-Sub-Objekte das gleiche? Was ist, wenn der Titel ein anderes Objekt ist? Ich müsste vorher alle Eigenschaften initialisieren? – raphadko

+0

@raphadko Ja, * any * Objekt, dem Sie eine Eigenschaft hinzufügen. Sie müssen sie nicht initialisieren, aber wenn Sie nicht * müssen * müssen Sie die $ set-Methode verwenden, die ich verlinkt habe. – Bert

Verwandte Themen