Sie müssen das Objekt JSON
nicht verwenden.
const child = {
props:["user"],
data(){
return {
localUser: Object.assign({}, this.user)
}
}
}
Verwenden localUser
(oder was auch immer Sie es nennen wollen) in Ihrem Kind.
bearbeiten
ich eine Geige für eine andere Antwort auf diese Frage erstellt geändert hatte das obige Konzept und @ user3743266
fragte
Ich komme mit diesem selbst, und ich in den Griff zu demonstrieren Finde das sehr nützlich. Ihr Beispiel funktioniert gut. Im Kind haben Sie ein Element in Daten erstellt, das eine Kopie der Requisite enthält, und das Kind arbeitet mit der Kopie . Interessant und nützlich, aber ... es ist mir nicht klar , wenn die lokale Kopie aktualisiert wird, wenn etwas anderes die Eltern ändert. Ich habe deine Geige modifiziert und die v-ifs entfernt, so dass alles sichtbar ist, und Duplizierung der Edit-Komponente. Wenn Sie den Namen in einer Komponente ändern, ist der andere verwaist und erhält keine Änderungen?
Die aktuelle Komponente wie folgt aussieht:
Vue.component('edit-user', {
template: `
<div>
<input type="text" v-model="localUser.name">
<button @click="$emit('save', localUser)">Save</button>
<button @click="$emit('cancel')">Cancel</button>
</div>
`,
props: ['user'],
data() {
return {
localUser: Object.assign({}, this.user)
}
}
})
Weil ich die Design-Entscheidung ein lokales kopieren des Benutzers verwenden gemacht, @ user3743266 korrekt ist, wird die Komponente nicht automatisch aktualisiert. Die Eigenschaftuser
wird aktualisiert, aber localUser
ist nicht. In diesem Fall wenn Sie lokale Daten automatisch aktualisieren wollten, wenn sich die Eigenschaft änderte, würden Sie einen Beobachter benötigen.
Vue.component('edit-user', {
template: `
<div>
<input type="text" v-model="localUser.name">
<button @click="$emit('save', localUser)">Save</button>
<button @click="$emit('cancel')">Cancel</button>
</div>
`,
props: ['user'],
data() {
return {
localUser: Object.assign({}, this.user)
}
},
watch:{
user(newUser){
this.localUser = Object.assign({}, newUser)
}
}
})
Hier ist die aktualisierte fiddle.
Damit haben Sie vollständige Kontrolle darüber, ob/wenn die lokalen Daten aktualisiert oder ausgegeben werden. Beispielsweise möchten Sie möglicherweise eine Bedingung überprüfen, bevor Sie den lokalen Status aktualisieren.
watch:{
user(newUser){
if (condition)
this.localUser = Object.assign({}, newUser)
}
}
Wie ich an anderer Stelle gesagt, gibt es Zeiten, in denen Sie die Vorteile von Objekten nehmen möchten Eigenschaften wandelbar zu sein, aber es gibt auch Zeiten wie diesen, wo Sie mehr Kontrolle wünschen könnten.
@ user3743266 Eine Erklärung hinzugefügt. – Bert
Sehr schön. Das war sehr interessant, danke. Vue rockt meine Oma. Ich denke Evan You ist in Wirklichkeit ein Team von 30 Raketenwissenschaftlern. – bbsimonbb
Sind Sie sicher? Ich würde sagen, dass dieser Thread und Ihre Antwort Tonnen von Wert haben. Fragen wie diese sind potenziell für alle relevant, die vue verwenden. Lass es, und es könnte ein langes und überraschendes Leben haben. – bbsimonbb