插槽
子组件中通过slot
标签定义插槽插入的位置,slot标签相当于一个占位符;
插槽分为匿名插槽、具名插槽、动态插槽、作用域插槽
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| <!-- * @Description: * @Author: xiuji * @Date: 2022-09-07 17:49:20 * @LastEditTime: 2022-09-12 16:06:36 * @LastEditors: Do not edit --> <template> <div class="slot"> <header class="header"> <!-- slot标签相当于一个占位符 --> <slot name="header"></slot> // 具名插槽 </header> <main class="main"> <!-- slot标签相当于一个占位符 --> <slot></slot> // 匿名插槽 </main> <footer class="footer"> <!-- slot标签相当于一个占位符 --> <slot name="footer"></slot> </footer>
</div> </template>
<script setup lang="ts">
</script>
<style lang="scss" scoped> .header { height: 200px; background-color: aqua; }
.main { height: 300px; background-color: bisque; }
.footer { height: 200px; background-color: cadetblue; } </style>
|
父组件中使用插槽:
1.引入组件
2.使用插槽:在template标签中编写需要插入组件的内容即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| <!-- * @Description: * @Author: xiuji * @Date: 2022-08-31 21:14:30 * @LastEditTime: 2022-09-12 16:06:03 * @LastEditors: Do not edit --> <template> <div class="content"> <Slot> <template #[name]> // 动态插槽,插槽可以是一个变量名 <div> 我被插入了上面 </div> </template> <template #default> // 匿名插槽,可用v-slot或#default <div> 我被插入了中间 </div> </template> <template #footer> // 具名插槽,可用#{name}或v-slot:name <div> 我被插入了下面 </div> </template> </Slot> </div> </template>
<script setup lang="ts"> import Slot from '../../components/Slot/index.vue' import { ref } from 'vue' const name = ref('header') const changeSlot = () => { name.value = 'footer' } </script>
|
作用域插槽
父组件动态绑定参数,派发给父组件的slot去使用
1 2 3 4 5 6 7 8
| <main class="main"> <!-- slot标签相当于一个占位符 --> <div> <div v-for="(i,k) in 100" :key="k"> <slot :data="i" :length="k"></slot> </div> </div> </main>
|
子组件内通过结构方式取值,可传多个参数
1 2 3 4 5
| <template #default="{data,length}"> <div> {{data}}---{{length}} </div> </template>
|