Skip to content

插槽:让父组件可以向子组件的指定位置插入HTML结构

父组件 ===> 子组件

默认插槽

在组件标签中写入普通标签

JavaScript
<Category title="美食" :listData="foods">
  <img src="https://img0.baidu.com/it/u=2038377207,4244562443&fm=253&fmt=auto&app=138&f=JPEG?w=751&h=500" alt="烧烤">
</Category>

在组件模板中写插槽

html
<slot></slot>

插槽还可以传递默认值,当组件标签中没有传递过来数据时,就会显示默认值

具名插槽

可以给插槽指定名称

插槽命名

vue
<template>
    <div class="category">
        <h3>{{title}}分类</h3>
        <slot name="demo1"></slot>
        <slot name="demo2"></slot>
    </div>
</template>

使用插槽

html
<img slot="demo1"
  src="https://img0.baidu.com/it/u=2038377207,4244562443&fm=253&fmt=auto&app=138&f=JPEG?w=751&h=500"
  alt="烧烤"
/>
<a slot="demo2" href="https://www.baidu.com">百度</a>

如果使用的了template标签,在写solt时就可以采用新写法

vue
<template v-slot:demo2>
  <div class="foot">
    <a href="#">经典</a>
    <a href="#">热门</a>
    <a href="#">推荐</a>
  </div>
</template>

作用域插槽

能让插槽把数据反着传递给需要使用插槽的人。

可以传递多个值。

插槽给使用者传递数据

vue
<template>
  <div class="category">
    <h3>{{ title }}分类</h3>
    <slot :foods="foods">我是默认的内容!</slot>
  </div>
</template>

使用者接收数据

第一种写法:

vue
<Category title="美食">
  <template scope="value">
    <ul>
      <li v-for="(f,index) in value.foods" :key="index">{{f}}</li>
    </ul>
  </template>
</Category>

第二种写法:

vue
<Category title="美食">
  <ul slot-scope="value">
    <li v-for="(f,index) in value.foods" :key="index">{{f}}</li>
  </ul>
</Category>