L'exemple ci-dessous vous montre comment définir le modèle du composant parent au composant enfant et synchroniser les données entre eux. Ceci est très utile lorsque vous divisez les formulaires d'application en différents composants et que vous les utilisez dans des contextes différents. De cette façon, vous pouvez utiliser, par exemple, des fragments de formulaire (composants) à différents endroits sans vous répéter.
COMPOSANT PARENT
<template lang="pug">
.parent
Child(:model="model")
br
label(for="c") Set "c" from parent
input(id="c", v-model="model.c")
.result.
<br>
<span> View from parent :</span>
<br>
a = {{ model.a }}
<br>
b = {{ model.b }}
<br>
c = {{ model.c }}
</template>
<script>
import Child from './components/child.vue'
export default {
name: "App",
components: {
Child
},
data() {
return {
// This model is set as a property for the child
model: {
a: 0,
b: 0,
c: 0
}
}
},
};
</script>
COMPOSANT ENFANT
<template lang="pug">
.child
label(for="a") Set "a" from child
input(id="a", v-model="internalModel.a", @input="emitModel")
br
br
label(for="b") Set "b" from child
input(id="b", v-model="internalModel.b", @input="emitModel")
.result
br
span View from child
br
| a = {{ internalModel.a }}
br
| b = {{ internalModel.b }}
br
| c = {{ internalModel.c }}
</template>
<script>
export default {
name: 'Child',
props: {
model: {
type: Object
}
},
data() {
return {
internalModel: {
a:0,
b:0,
c:0
}
}
},
methods: {
emitModel() {
this.$emit('input', this.internalModel)
}
},
mounted() {
this.internalModel = this.model;
}
}
</script>
3 votes
Ça m'a aidé.