我正在使用Vue JS制作具有一个通用列表项组件的列表。如果不存在满足正确类型的通用组件,则将使用自定义组件。
<email-queue-item v-for="item in queue"
:key="item.id"
:item="item"
v-if="type == 'EmailMessage'"></email-queue-item>
<queue-item v-for="item in queue"
:key="item.id"
:item="item"
v-else></queue-item>
Run Code Online (Sandbox Code Playgroud)
上面的代码更好地说明了我正在尝试做的事情。我似乎遇到的问题是到期循环首先创建两个列表,然后检查条件列表。是否有办法在类型上选择正确的组件花瓶,然后遍历列表?
用于显示这些组件的数据如下所示:
{
name: Email,
type: EmailMessage,
data:[
{...},
{...},
...
]
}
Run Code Online (Sandbox Code Playgroud)
动态组件使模板中的工作变得非常简单:
<component
:is="type == 'EmailMessage' ? 'email-queue-item' : 'queue-item'"
v-for="item in queue"
:key="item.id"
:item="item"
/>
Run Code Online (Sandbox Code Playgroud)
如果我理解正确的话,你会想要带有动态组件的 v-for 。
所以查看Vue 官方指南:动态组件,然后演示将如下所示,其中使用v-bind:is:
Vue.config.productionTip = false
Vue.component('email-queue-item', {
template: `<div><h3 :style="{'background-color':color}">Email: {{color}}</h3></div>`,
props: ['color']
})
Vue.component('message-queue-item', {
template: `<div><h1 :style="{'background-color':color}">Message: {{color}}</h1></div>`,
props: ['color']
})
new Vue({
el: '#app',
data() {
return {
items: [
{'component':'email-queue-item', 'color':'red'},
{'component':'message-queue-item', 'color':'blue'},
{'component':'email-queue-item', 'color':'green'}
]
}
}
})Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<div id="app">
<div v-for="(item, index) in items" :key="index" :color="item.color" :is="item.component"></div>
</div>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4220 次 |
| 最近记录: |