Vue2插槽的使用

简介: 从基础到实战,我们一环都不要少!

基础语法

在 Vue 2 中,插槽(Slot)是一种用于在组件中进行内容分发的机制。它允许你在父组件中编写子组件的部分内容,以便在子组件中动态地插入不同的内容。

使用插槽的好处之一是提高了组件的可复用性和灵活性。父组件可以根据需要自定义子组件的部分内容,而无需修改子组件本身

Vue 2 中的插槽有两种类型:具名插槽和默认插槽。

具名插槽(Named Slots):

具名插槽允许你在子组件中通过特定名称来插入内容。

在父组件中,你可以使用<template>标签的 slot 属性,并指定一个名称。例如,<slot name="header"></slot> 表示一个具名插槽,名称为 "header"。

在子组件中,你可以使用 <template> 标签的 slot 元素,来占位插入父组件传递的具名插槽内容。例如,<slot name="header"></slot>

默认插槽(Default Slot):

默认插槽允许你在子组件中插入未命名的内容。如果父组件在使用子组件时不提供具名插槽的内容,那么将使用默认插槽来显示内容。

在子组件中,你可以使用 来定义默认插槽。

如何使用具名插槽和默认插槽:

父组件 ParentComponent.vue:

<template>
  <div>
    <h2>父组件</h2>
    <ChildComponent>
      <template v-slot:header>
        <h3>这是插入到具名插槽 header 的内容</h3>
      </template>
      <p>这是默认插槽的内容</p>
    </ChildComponent>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
    
  components: {
    
    ChildComponent,
  },
};
</script>

子组件 ChildComponent.vue:

<template>
  <div>
    <h3>子组件</h3>
    <slot name="header"></slot>
    <slot></slot>
  </div>
</template>

<script>
export default {
    

};
</script>

在上面的示例中,父组件使用子组件<ChildComponent>并在其中传递了具名插槽和默认插槽的内容。

子组件中的<slot name="header"></slot> 表示具名插槽 "header",它将显示父组件中通过<template v-slot:header>插入的内容。

<slot></slot>表示默认插槽,它将显示父组件中没有被具名插槽占用的内容。

通过使用插槽,你可以在父组件中动态地插入子组件的部分内容,从而实现更灵活的组件复用和定制。

我的理解

在普通情况下,当父组件引用子组件时,子组件的标签内是不能包含其他内容的。但是通过使用插槽,父组件可以在子组件标签内写入内容,从而对子组件进行定制和扩展。

无论是具名插槽还是默认插槽,它们都是一种在父组件中对子组件进行修饰的机制。

具名插槽允许你在父组件中根据名称插入特定的内容。通过在子组件中定义具名插槽,并在父组件中使用<template v-slot:slotName>来填充内容,实现了父组件对子组件的定制。

默认插槽则是一个备用的插槽,当父组件没有为具名插槽提供内容时,将使用默认插槽来展示内容。这样,父组件可以在子组件标签内直接写入内容,作为默认插槽的内容。

使用插槽可以让父组件更加灵活地控制和定制子组件的部分内容,提高了组件的可复用性和扩展性。

实战

在 Vue 2 中使用插槽来创建一个可复用的模态框组件。

Modal.vue 组件:

<template>
  <div class="modal" v-if="show">
    <div class="modal-content">
      <slot></slot>
    </div>
  </div>
</template>

<script>
export default {
    
  props: {
    
    show: {
    
      type: Boolean,
      default: false
    }
  }
};
</script>

<style>
.modal {
    
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: rgba(0, 0, 0, 0.5);
  display: flex;
  align-items: center;
  justify-content: center;
}

.modal-content {
    
  background-color: #fff;
  padding: 20px;
}
</style>

在上述代码中,Modal.vue 是一个简单的模态框组件。它根据 show 属性来控制是否显示模态框。

模态框的内容是通过插槽 进行分发的。父组件在使用 组件时,可以在 标签内放置任意内容,作为模态框的内容。

现在,我们可以在父组件中使用 Modal 组件,并在其中定义模态框的内容。

App.vue 父组件:

<template>
  <div>
    <h2>父组件</h2>
    <button @click="showModal = true">打开模态框</button>
    <Modal :show="showModal">
      <h3>这是一个模态框标题</h3>
      <p>这是模态框的具体内容</p>
      <button @click="showModal = false">关闭模态框</button>
    </Modal>
  </div>
</template>

<script>
import Modal from './Modal.vue';

export default {
    
  components: {
    
    Modal
  },
  data() {
    
    return {
    
      showModal: false
    };
  }
};
</script>

在 App.vue 父组件中,我们引入了 Modal.vue 组件,并在 <Modal> 标签内放置了模态框的内容,包括标题和具体内容。通过 showModal 属性来控制模态框的显示或隐藏。

当点击 "打开模态框" 按钮时,showModal 状态会变为 true,从而显示模态框。模态框内的按钮点击事件可以修改 showModal 状态为 false,实现关闭模态框。

通过使用插槽,我们实现了一个可复用的模态框组件,父组件可以根据需要定制模态框的内容。


谢谢款待

目录
相关文章
|
索引 容器
UE5 学习笔记-01
UE5 学习笔记
|
SQL 前端开发 关系型数据库
LLM大模型实战 —— DB-GPT阿里云部署指南
DB-GPT 是一个实验性的开源应用,它基于FastChat,并使用vicuna-13b作为基础模型, 模型与数据全部本地化部署, 绝对保障数据的隐私安全。 同时此GPT项目可以直接本地部署连接到私有数据库, 进行私有数据处理, 目前已支持SQL生成、SQL诊断、数据库知识问答、数据处理等一系列的工作。
11372 75
|
Linux 网络安全 开发工具
python更换版本
python更换版本
740 1
|
8月前
|
机器学习/深度学习 人工智能 算法
GSPO:Qwen让大模型强化学习训练告别崩溃,解决序列级强化学习中的稳定性问题
这是7月份的一篇论文,Qwen团队提出的群组序列策略优化算法及其在大规模语言模型强化学习训练中的技术突破
1744 0
GSPO:Qwen让大模型强化学习训练告别崩溃,解决序列级强化学习中的稳定性问题
|
存储 人工智能 监控
一键部署 Dify + MCP Server,高效开发 AI 智能体应用
本文将着重介绍如何通过 SAE 快速搭建 Dify AI 研发平台,依托 Serverless 架构提供全托管、免运维的解决方案,高效开发 AI 智能体应用。
7074 65
|
人工智能 JSON 自然语言处理
如何用大模型评估大模型——PAI-Judge裁判员大语言模型的实现简介
阿里云人工智能平台 PAI 推出 PAI-Judge 裁判员大模型,为用户构建符合应用场景的多维度、细粒度的评测体系,支持单模型评测和双模型竞技两种模式,允许用户自定义参数,实现准确、灵活、高效的模型自动化评测,为模型迭代优化提供数据支撑。 相比通用大模型尤其在回答确定性/数学类问题、角色扮演、创意文体写作、翻译等场景下,PAI-Judge 系列模型表现优异,可以直接用于大模型的评估与质检。
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
1893 4
|
机器学习/深度学习 数据采集 供应链
使用Python实现智能食品价格预测的深度学习模型
使用Python实现智能食品价格预测的深度学习模型
424 6
|
SQL 关系型数据库 MySQL
阿里云数据库使用教程、购买、价格、连接数据库全流程
阿里云数据库使用涉及购买、创建及登录步骤。支持MySQL、SQL Server等引擎。购买时选择所需配置、地域和可用区。创建数据库和账号后,通过DMS登录。在同一地域内,ECS需将IP加入RDS白名单以实现内网连接。详细流程见阿里云官方文档。
1948 2
JRebel and xrebel 热部署插件 激活时出现LS client not configued 报错
JRebel and xrebel 热部署插件 激活时出现LS client not configued 报错
1060 0