Vue 3 在 <slot> 中传递数据
Vue 3 pass data in <slot>
我想要达到的目标:
在 Post.vue 中显示来自动态 link 的图像,它遵循 PostLayout.vue 的布局
在PostLayout.vue中,我有一个名为postFeaturedImage的,在slot里面,有一个,我想用图片作为它的背景。
我正在使用的是:
Laravel、InertiaJS、Vue 3
我的代码是:
Post.vue:
<template>
<PostLayout>
<template #postfeaturedImage>
<!-- Here I want to display the image -->
</template>
</PostLayout>
</template>
<script>
import PostLayout from '@/Layouts/PostLayout'
export default {
data() {
return {
featured_image: ''
}
},
components: {
PostLayout,
},
props: {
post: Object /* Passed the prop from Controller */
},
mounted () {
this.featured_image = this.post.featured_image
}
}
</script>
PostLayout.vue:
<template>
<slot name="postfeaturedImage" :bgImage="bgImage">
<div :style="`background-image:url(${bgImage}); height: 75vh;`"></div>
</slot>
</template>
<script>
export default {
}
</script>
我删除了所有不相关的代码。我是 Vue 3 和 Inertia 的初学者,需要帮助!
为您的 PostLayout.vue
添加道具
<script>
export default {
props: {
bgImage: { type: String },
},
};
</script>
并在 Post.vue
中为该道具赋值
<template>
<PostLayout :bgImage="featured_image"> </PostLayout>
</template>
如果您想要 post 没有图像和不同的布局,您应该这样做:
<template>
<PostLayout>
<template #postfeaturedImage> post without background image</template>
</PostLayout>
</template>
另一种方法是创建 FeaturedImage
组件。此外,您可以直接从收到的道具中引用 post 图片。在这种情况下,不需要 data
方法和 mounted
。
<template>
<PostLayout>
<template #postfeaturedImage>
<FeaturedImage :src="post.featured_image" />
</template>
</PostLayout>
</template>
<script>
import PostLayout from '@/Layouts/PostLayout'
import FeaturedImage from '@/Layouts/FeaturedImage'
export default {
components: {
PostLayout,
FeaturedImage
},
props: {
post: Object
}
}
</script>
我想要达到的目标:
我正在使用的是:
Laravel、InertiaJS、Vue 3 我的代码是:
PostLayout.vue: 为您的 PostLayout.vue 并在 Post.vue 如果您想要 post 没有图像和不同的布局,您应该这样做: 另一种方法是创建
在 Post.vue 中显示来自动态 link 的图像,它遵循 PostLayout.vue 的布局
在PostLayout.vue中,我有一个名为postFeaturedImage的
Post.vue:<template>
<PostLayout>
<template #postfeaturedImage>
<!-- Here I want to display the image -->
</template>
</PostLayout>
</template>
<script>
import PostLayout from '@/Layouts/PostLayout'
export default {
data() {
return {
featured_image: ''
}
},
components: {
PostLayout,
},
props: {
post: Object /* Passed the prop from Controller */
},
mounted () {
this.featured_image = this.post.featured_image
}
}
</script>
<template>
<slot name="postfeaturedImage" :bgImage="bgImage">
<div :style="`background-image:url(${bgImage}); height: 75vh;`"></div>
</slot>
</template>
<script>
export default {
}
</script>
我删除了所有不相关的代码。我是 Vue 3 和 Inertia 的初学者,需要帮助!
<script>
export default {
props: {
bgImage: { type: String },
},
};
</script>
<template>
<PostLayout :bgImage="featured_image"> </PostLayout>
</template>
<template>
<PostLayout>
<template #postfeaturedImage> post without background image</template>
</PostLayout>
</template>
FeaturedImage
组件。此外,您可以直接从收到的道具中引用 post 图片。在这种情况下,不需要 data
方法和 mounted
。<template>
<PostLayout>
<template #postfeaturedImage>
<FeaturedImage :src="post.featured_image" />
</template>
</PostLayout>
</template>
<script>
import PostLayout from '@/Layouts/PostLayout'
import FeaturedImage from '@/Layouts/FeaturedImage'
export default {
components: {
PostLayout,
FeaturedImage
},
props: {
post: Object
}
}
</script>