Vue 使用嵌套组件进行双向数据绑定 [英] VueTwo Way Data Binding with Nested Components
问题描述
假设我想显示一个问题列表.对于每个问题,都有一个答案列表,没有对错.对于每个问题,用户可以选择一个答案.我想知道如何在所选答案上创建双向绑定.
Vue:
新的Vue({el: "#app",数据:{问题: [{}]}}
示例问题模型:
<代码>{编号:1,name: "你最喜欢哪种颜色?",selectedAnswerId:空,selectedAnswerName:空,答案:[{id: 1, name: red, photoUrl: ".../red", selected: false},{id: 2, name: green, photoUrl: ".../green", selected: false},{id: 3, name: blue, photoUrl: ".../blue", selected: false},]}
组件:
var myAnswer ={道具: ["id", "name", "url", "selected"],模板:`<div class="answer" v-bind:class="{selected: selected}"><img class="answer-photo" v-bind:src="url"><div class="answer-name">{{name}}</div>
`};Vue.component("我的问题",{道具: ["id", "name", "answers"],成分:{我的答案":我的答案},模板:`<div class="问题"><div class="question-name">{{name}}</div><div class="问题-答案"><my-answer v-for="answer in answers" v-bind:id="answer.id" v-bind:name="answer.name" v-bind:url="answer.photoUrl" v-bind:selected="answer.selected"></my-answer>
`});
当用户通过单击 div 选择问题的答案时,我希望 Question 模型的 selectedAnswerId/selectedAnswerName 以及相应的答案 selected 属性进行设置.因此,为了完成这种双向绑定,我需要在我的组件中添加什么?我相信它需要输入元素和 v-model,但我无法弄清楚.另外,我只接触了 Vue.js 一天,并没有使用相关框架的经验.因此,如果我在做任何明显错误或违反最佳实践的事情,那也很高兴知道.提前致谢!
答案将处理点击事件并发出(自定义)selected-answer 事件.问题将有自己的数据项来存储选择的答案 ID;答案组件的 selected
道具将基于此.问题将通过设置其 selectedId
来处理 selected-answer 事件.
var myAnswer = {道具: ["id", "name", "url", "selected"],模板:`<div class="answer" v-bind:class="{selected: selected}"@click="setSelection()"><div class="answer-name">{{name}}</div>
`,方法: {设置选择(){this.$emit('selected-answer', this.id);}}};Vue.component("我的问题", {道具: ["id", "name", "answers"],数据() {返回 {selectedId:空};},成分: {我的答案":我的答案},模板:`<div class="问题"><div class="question-name">{{name}}</div><div class="问题-答案"><my-answer v-for="答案中的答案":id="answer.id" :name="answer.name" :url="answer.photoUrl":selected="answer.id === selectedId" @selected-answer="selectAnswer"></my-answer>