v-model
будет работать только в том случае, если вы отобразите tabList
в нем (что-то вроде v-model="tabList"
в компоненте.
Вам придется изменить каждый ответ напрямую, используя value
и @input
вместо v-model
:
<div class="columns is-vcentered" v-for="(answer, index) in tab.answers" :key="index">
<input type="text" :value="answer.content"
@input="$store.commit('updateAnswer', { podcastId: tab.id, answerId: answer.id, newContent: $event.target.value })" />
</div>
// tab is an element of my tabList
И мутация updateAnswer
, например:
mutations: {
updateAnswer (state, { podcastId, answerId, newContent }) {
state.listening.podcastList
.find(podcast => podcast.id === podcastId)
.map(podcast => podcast.answers)
.find(answer => answer.id === answerId).content = newContent;
}
}
-
Возможно, вы уменьшите шаблон, создавметод:
methods: {
updateAnswer(tab, answer, event) {
this.$store.commit('updateAnswer', { podcastId: tab.id, answerId: answer.id, newContent: event.target.value });
}
}
И использовать его следующим образом:
<input type="text" :value="answer.content" @input="updateAnswer(tab, answer, $event)" />
Или путем создания компонента (который может быть функциональным):
Vue.component('answer', {
template: `
<input type="text" :value="answer.content"
@input="$store.commit('updateAnswer', { podcastId: tab.id, answerId: answer.id, newContent: $event.target.value })" />
`
props: ['tab', 'answer']
})
И используйте это как:
<div class="columns is-vcentered" v-for="(answer, index) in tab.answers" :key="index">
<answer :tab="tab" :answer="answer"/>
</div>