gpt4 book ai didi

vue.js - 带槽的动态组件

转载 作者:搜寻专家 更新时间:2023-10-30 22:23:52 26 4
gpt4 key购买 nike

如何在父组件中使用动态组件中的命名插槽?

slider 组件采用动态幻灯片组件数组:

<slider :slides="slides" />

每张幻灯片都有命名槽,其中包含 slider 要使用的内容:

<template>
<div class="slide">
<div slot="main">Slide 1 Main</div>
<div slot="meta">Slide 1 Meta</div>
</div>
</template>

slider 现在应该使用这些插槽,如下所示:

<template>
<div class="slider">
<div class="slider__slide" v-for="slide in slides">
<component :is="slide">
<div class="slider__slide__main">
<slot name="main" /><!-- show content from child's slot "main" -->
</div>
<div class="slider__slide__meta">
<slot name="meta" /><!-- show content from child's slot "meta" -->
</div>
</component>
</div>
</div>
</template>

但是<component>忽略它的内部内容,所以插槽被忽略。

例子:
https://codepen.io/anon/pen/WZjENK?editors=1010

如果这不可能,是否有另一种方法可以创建一个从幻灯片组件获取 HTML 内容而不关心其内容的 slider ?

最佳答案

通过将主要/元部分拆分为它们自己的组件,您可以相对轻松地使用渲染函数将它们拆分为您想要的部分。

console.clear()

const slide1Meta = {
template:`<div>Slide 1 Meta</div>`
}
const slide1Main = {
template: `<div>Slide 1 Main</div>`
}
const slide2Meta = {
template:`<div>Slide 2 Meta</div>`
}
const slide2Main = {
template: `<div>Slide 2 Main</div>`
}

Vue.component('slider', {
props: {
slides: {
type: Array,
required: true
}
},
render(h){
let children = this.slides.map(slide => {
let main = h('div', {class: "slider__slide__main"}, [h(slide.main)])
let meta = h('div', {class: "slider_slide_meta"}, [h(slide.meta)])
return h('div', {class: "slider__slide"}, [main, meta])
})
return h('div', {class: "slider"}, children)
}
});


new Vue({
el: '#app',
data: {
slides: [
{meta: slide1Meta, main: slide1Main},
{meta: slide1Meta, main: slide2Main}
]
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.4/vue.min.js"></script>
<div id="app">
<slider :slides="slides" />
</div>

<script type="text/x-template" id="slide1-template">
<div class="slide">
<div slot="main">Slide 1 Main</div>
<div slot="meta">Slide 1 Meta</div>
</div>
</script>

<script type="text/x-template" id="slide2-template">
<div class="slide">
<div slot="main">Slide 2 Main</div>
<div slot="meta">Slide 2 Meta</div>
</div>
</script>

关于vue.js - 带槽的动态组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46465325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com