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 学习笔记
|
Linux 网络安全 开发工具
python更换版本
python更换版本
680 1
|
10月前
|
存储 人工智能 监控
一键部署 Dify + MCP Server,高效开发 AI 智能体应用
本文将着重介绍如何通过 SAE 快速搭建 Dify AI 研发平台,依托 Serverless 架构提供全托管、免运维的解决方案,高效开发 AI 智能体应用。
6769 64
|
11月前
|
人工智能 JSON 自然语言处理
如何用大模型评估大模型——PAI-Judge裁判员大语言模型的实现简介
阿里云人工智能平台 PAI 推出 PAI-Judge 裁判员大模型,为用户构建符合应用场景的多维度、细粒度的评测体系,支持单模型评测和双模型竞技两种模式,允许用户自定义参数,实现准确、灵活、高效的模型自动化评测,为模型迭代优化提供数据支撑。 相比通用大模型尤其在回答确定性/数学类问题、角色扮演、创意文体写作、翻译等场景下,PAI-Judge 系列模型表现优异,可以直接用于大模型的评估与质检。
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
1678 4
|
机器学习/深度学习 数据采集 供应链
使用Python实现智能食品价格预测的深度学习模型
使用Python实现智能食品价格预测的深度学习模型
393 6
|
安全 Linux 虚拟化
minos 2.1 中断虚拟化——ARMv8 异常处理
越往后,交叉的越多,大多都绕不开 ARMv8 的异常处理,所以必须得先了解了解 ARMv8 的异常处理流程 先说一下术语,从手册中的用词来看,在 x86 平台,一般将异常和中断统称为中断,在 ARM 平台,一般将中断和异常统称为异常
404 3
minos 2.1 中断虚拟化——ARMv8 异常处理
JRebel and xrebel 热部署插件 激活时出现LS client not configued 报错
JRebel and xrebel 热部署插件 激活时出现LS client not configued 报错
962 0
|
安全 网络虚拟化 数据安全/隐私保护
IEEE802系列协议知识点总结
IEEE802系列协议知识点总结
1260 1