sot(插槽)是 Vue 中的一个重要功能,它允许我们向组件传递模板内容。主要有以下几个要点:
一、基本概念
插槽是组件内的一个占位符,让我们可以向组件内部插入内容。父组件可以在使用子组件时,在子组件标签内传入内容,这些内容会被渲染到子组件内部的slot 标签位置。
二、使用方式
子组件中使用 slot 标签定义插槽位置:
html:
<template>
<div>
<slot></slot>
</div>
</template>
父组件中使用:
html:
<ChildComponent>
这里的内容会被插入到子组件的插槽位置
</ChildComponent>
三、插槽类型
- 默认插槽: 没有名字的插槽,每个组件只能有一个。
- 具名插槽: 带有 name 属性的插槽,可以有多个。使用 template 和 v-slot 指令来指定内容应该插入到哪个具名插槽。
- 作用域插槽: 能够接收子组件传递的数据的插槽
扩展知识
一、具名插槽的使用
子组件定义具名插槽:
html:
<div class="container">
<header>
<slot name="header"></slot>
</header>
<main>
<slot></slot>
</main>
<footer>
<slot name="footer"></slot>
</footer>
</div>
父组件使用具名插槽:
html:
<BaseLayout>
<template v-slot:header >
<h1>页面标题</h1>
</template>
<template v-slot:default >
<p>主要内容</p>
</template>
<template v-slot:footer >
<p>页脚内容</p>
</template>
</BaseLayout>
二、作用域插槽
子组件传递数据:
html:
<slot :text="greetingMessage" :count="1"></slot>
父组件接收数据:
html:
<MyComponent v-slot="slotProps">
{{ slotProps.text }}{{ slotProps.count }}
</MyComponent>
三、插槽的特点
- 插槽内容可以访问到父组件的数据作用域
- 插槽内容无法访问子组件的数据作用域
- 默认内容 :slot 标签可以包含默认内容,当父组件没有提供内容时显示
html:
<slot>这是默认内容</slot>
四、插槽的应用场景
- 内容分发:比如页面布局组件
- 组件复用:通过插槽提供内容的灵活性
- 组件封装:保持组件的可扩展性
相关文档链接:
https://cn.vuejs.org/guide/components/slots.html