Vue 中的插槽(Slot)

55 阅读1分钟

Vue 中的插槽(Slot)是一种组件间通信的技术,它允许父组件向子组件中插入 HTML 结构或组件。

使用场景,在不同的父组件中使用某个子组件的时候,想要动态的渲染子组件的内容。子组件的部分内容可以从父组件中“传递”到子组件进行显示。

插槽是什么

下面看一个例子

写一个子组件:ChildCom.vue

<template>
    <div>
        <div>我是子组件</div>
    </div>
</template>

<!-- setup -->
<script lang="ts" setup>

</script>

1
2
3
4
5
6
7
8
9
10

写一个父组件:HomePage.vue

在父组件中使用子组件 ChildCom

<template>
  <div>
    <div>我是父组件</div>
    <ChildCom>
      <p>测试一下,把内容写在这里,看是否能否显示</p>
    </ChildCom>
  </div>
</template>

<!-- setup -->
<script lang="ts" setup>

import ChildCom from '@/components/ChildCom.vue';

</script>

可以看到在父组件中,使用子组件的时候,在子组件标签中间添加的内容是看不见的

那如果我想实现显示父标签中,子标签中间添加的内容,该怎么办?

修改子组件:ChildCom.vue ,添加一个 <slot></slot> 标签:

<template>
    <div>
        <div>我是子组件</div>
        <slot></slot>
    </div>
</template>

<!-- setup -->
<script lang="ts" setup>

</script>

1
2
3
4
5
6
7
8
9
10
11

在子组件中添加了一个 slot 插槽。那么在父组件中使用子组件的时候,子标签中的内容就回显示到子组件的 slot 插槽中。