1 作用:
让父组件可以向子组件指定位置插入html结构,是一种组件间的通信方式,适用于父组件=>子组件
2 使用方式
(1)默认插槽
1 2 3 4 5 6 7 8 9 10 11 12
| 父组件: <Category> <div> html结构 </div> </Category> 子组件: <template> <div> <slot>插槽默认内容</slot> </div> </template>
|
2 具名插槽
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
| 父组件: <Category> <template #header> <div> html结构 </div> </template> <template slot="center"> <div> html结构 </div> </template> <template v-slot:footer> <div> html结构 </div>
</template> </Category> 子组件: <template> <div> <slot name="center">插槽默认内容</slot> <slot name="footer">插槽默认内容</slot> </div> </template>
|
3 作用域插槽
理解:数据在组件的自身,但根据数据生成的结构需要组件的使用者决定,(games数据在Category组件中,但使用数据所遍历的结构由App组件决定)
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
| 父组件: <Category title="游戏"> <template v-slot="{games}"> <ul> <li v-for="(game,index) in games" :key="index"> {{game}} </li> </ul> </template> </Category> <Category title="游戏"> <template v-slot="{games}"> <ol> <li v-for="(game,index) in games" :key="index"> {{game}} </li> </ol> </template> </Category> 子组件: <template> <div> <h3>{{title}}分类</h3> <slot :games="games"></slot> </div> </template>
<script> import {reactive} from "vue" export default { name:'Category', props:['title'], setup(){ let games=reactive(['红色警戒','超级玛丽','穿越火线','魂斗罗']) return{ games } }
} </script>
|