添加一個模式,表示您要使用的組件並設置:is="task.mode"
。
<div id="app">
<list></list>
</div>
<template id="list-template">
<div>
<component v-for='task in tasks'
:is='task.mode'
:task='task'
@edit="edit"
@save="save">
</component>
</div>
</template>
<template id="task-template">
<div>
<h1>{{task.text}}</h1>
<button @click="$emit('edit', task)">Edit</button>
</div>
</template>
<template id="task-edit-template">
<div>
<input type="text" :value="task.text">
<button @click="$emit('save', task)">Save</button>
</div>
</template>
代碼
Vue.component("list",{
template:"#list-template",
data(){
return {
tasks:[{text: "task1", mode:"task"}, {text: "task1", mode:"task"}]
}
},
methods:{
edit(task){
task.mode = "task-edit"
},
save(task){
task.mode = "task"
}
}
})
Vue.component("task", {
props:["task"],
template:"#task-template",
})
Vue.component("task-edit",{
props:["task"],
template:"#task-edit-template"
})
new Vue({
el:"#app"
})
Working example。注意:不實際保存編輯。
如果要動態更改渲染的組件,您可以使用動態組件。 https://vuejs.org/v2/guide/components.html#Dynamic-Components – Bert
是的,因此''':是'''。主要問題是,動態組件是否需要影響整個列表,或者我可以只選擇一個組件用於一個列表項目? –
Gotcha。有一個工作小提琴/ codepen? – Bert