@app.vue
<template>
<div>
<!-- 插槽 slot -->
<!-- 一个页面结构已经固定, 就等着放东西 -->
<!-- 留出的放东西的预定空间 就是插槽 -->
<!-- 例如 电脑主板上的 CPU 显卡 内存 插槽 -->
<!-- 例如 化妆盒中的空间: 化妆品, 首饰... -->
<!-- 对于插槽, 必须用双标签书写 -->
<my-slot>
<div>
<span>壮壮</span>
<span>边边</span>
<span>浩浩</span>
<span>浩南</span>
</div>
<!-- vue2: 必须配合 template 标签用 -->
<!-- <template v-slot:menu>
<h2>哈哈哈哈</h2>
<h2>--柯晗说</h2>
</template> -->
<!-- vue3: 必须配合 template, 语法糖# -->
<template #menu>
<h2>晕晕晕了...</h2>
<h2>--壮壮</h2>
</template>
</my-slot>
</div>
</template>
<script>
import MySlot from './components/MySlot.vue'
export default {
components: { MySlot },
}
</script>
<style lang="scss" scoped></style>
@component/MySlot
<template>
<div class="my-slot">
<!-- 一种特殊的组件: 负责布局, 没有实际内容 -->
<div class="header">
<!-- 插槽占位符组件: 在运行时会替换成组件的标签内容 -->
<slot />
</div>
<div class="body">
<div class="menu">
<!-- 命名插槽 -->
<slot name="menu" />
</div>
<div class="content">
<slot />
</div>
</div>
</div>
</template>
<script>
export default {}
</script>
<style lang="scss" scoped>
.header {
background-color: #eee;
// 最小高度
min-height: 100px;
}
.body {
display: flex;
.menu {
background-color: yellowgreen;
width: 30%;
min-height: 400px;
}
.content {
background-color: violet;
width: 70%;
min-height: 400px;
}
}
</style>