Я пытаюсь разобраться, как реквизиты передаются дочерним компонентам и как они обновляются оттуда.
// parent.vue
<template>
<div>
<div v-for="elem in getCurrentArray">
<child-component :elem="elem"></child-component>
</div>
<button @click.prevent="currentIdx--">Prev</button>
<button @click.prevent="currentIdx++">Next</button>
</div>
</template>
<script>
export default {
components : {
ChildComponent
},
data(){
return {
arr : [ ["A", "B", "C" ], [ "D", "E" ]], // this would be populated from vue store
currentIdx : 0
}
},
computed : {
getCurrentArray(){
return this.arr[this.currentIdx]
}
},
}
</script>
// child.vue
<template>
<div>Prop: {{elem}} <input type="text" v-model="myinput" @blur="save" /></div>
</template>
<script>
export default {
props : [ "elem" ],
data(){
return {
myinput : this.elem
}
},
methods : {
save(){
// this.$store.dispatch("saveChildElement", { myinput }
}
},
mounted(){ console.log( this.elem + " being rendered" ) }
}
</script>
В этом примере у меня есть два набора массивов [«A», «B», «C»] и [«D», «E»].При загрузке страницы первый набор отображается через дочерние компоненты.
выглядит хорошо.Однако, когда я нажимаю «Далее», чтобы перейти ко второму набору, я получаю следующее:
Таким образом, при правильной передаче реквизитов входные значения текстового поля не обновляются.Когда я проверил console.log, стало ясно, что vue не выполняет рендеринг дочерних компонентов для «D» и «E».Вместо этого он просто использует существующие компоненты для «A» и «B».
Есть ли способ заставить vue перерисовать компоненты?Если нет, то как я могу убедиться, что для ввода в текстовое поле получены последние значения проп?Имейте в виду, что я хочу сохранить изменения входных значений через хранилище vue.