vue 三种 slot 插槽

143 阅读1分钟

slot 插槽

1. 作用

让父组件可以向子组件的指定位置插入HTML结构,也是一种组件之间通信的方式,适用于 父组件--->子组件

2.分类

  • 默认插槽

    • 理解:就是在父组件中,使用子组件标签的地方,标签内部写上HTML结构;然后就会插入到子组件中所在地方
    • 简单来说,就是在子组件中挖了一个坑,在父组件中将这个坑填上
// 父组件中
<Category>
    <div>
        html结构
    </div>    
</Category>
​
​
​
// 子组件中
<template>
    <div>
        <!-- 插槽部分 -->
        <slot></slot>
    </div>
</template>
  • 具名插槽

    • 理解:我们需要将不同的HTML结构放到不同的插槽当中,就可以给这些插槽起名字;父组件在“填坑”的时候也需要指定“坑”的名字
// 父组件中
<Category>
    <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>
  • 作用域插槽

    • 理解:数据在子组件的自身,但根据数据生成的结构要通过组件的使用者(父组件)来决定,例如:一组数据,渲染成有序列表还是无序列表,需要靠父组件来决定
    • 作用域插槽也可以有name(就是具名插槽)
// 父组件中
<Category>
    <template scope="scopeData">
        <!-- 渲染的是ul列表 -->
        <ul>
            <li v-for="(items,index) in scopeData.games">{{items}}</li>
        </ul>
    </template>
    
     <template scope="scopeData">
        <!-- 渲染的是h4列表 -->
        <h4>
            <li v-for="(items,index) in scopeData.games">{{items}}</li>             
        </h4>
    </template>  
</Category>
​
​
​
// 子组件中
<template>
    <div>
        <!-- 插槽部分 -->
        <slot :games="games"></slot>
    </div>
</template>
​
export default{
    name:"Category",
    data(){
        return{
            games:["红色警戒","穿越火线"]
        }   
    }
}