前端基础Vue项目中的插槽使用

2023-12-19

概念

简单理解就是组件内部留一个或多个的插槽位置,可供组件传对应的模板代码进去。插槽的出现,让组件变的更加灵活。

1. 匿名插槽

父组件
<son>
              <p>我是父组件通过匿名插槽传输的内容</p>
            </son>
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

子组件

<template>
  <div>
    我是子组件
    <slot></slot>
  </div>
</template>
<script>
export default {
}
</script>
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

样式

当然也可以直接在slot标签上写内容 ,比如

  <son>
            </son>
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
<template>
  <div>
    我是子组件
    <slot>我是后补内容</slot>
  </div>
</template>
<script>
export default {
}
</script>
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

大白话就是父组件并没有传输内容,有时为一个插槽设置具体的后备 (也就是默认的) 内容是很有用的,它只会在没有提供内容的时候被渲染。

2. 具名插槽

顾名思义就是带名字的插槽,假如需要在组件内部预留多个插槽位置,就需要为插槽定义名字,指定插入的位置。

Vue 2.6.0+ 版本,使用v-slot替代slot 和 slot-scope。

注意点:
1.具名插槽的内容必须使用模板< template ></ template >包裹;
2.不指定名字的模板插入匿名插槽中,推荐使用具名插槽,方便代码追踪且直观清楚;
3.匿名插槽具有隐藏的名字"default;"

2.1 具名插槽的缩写


跟 v-on 和 v-bind 一样,v-slot 也有缩写,即把参数之前的所有内容 (v-slot:) 替换为字符 #。
例如 v-slot:header 可以被重写为 #header;
然而,和其它指令一样,该缩写只在其有参数的时候才可用。这意味着以下语法是无效的:


父组件

 <son :title="name">
              <template #header><p>我是头部</p></template>
              <template #body><p>我是身体</p>
              </template>
              <template v-slot:[name]><p>我是脚部</p>
              </template>
            </son>
子组件
<template>
  <div>
    我是子组件{{title}}
    <slot name="footer"></slot>
    <slot name='body'></slot>
    <slot name="header"></slot>
  </div>
</template>
<script>
export default {
  props: {
    title: String
  }
}
</script>

2.2 动态插槽名

动态指令参数也可以用在 v-slot 上,来定义动态的插槽名

<template v-slot:[name]><p>我是脚部</p>
              </template>

3. 作用域插槽

3.1 父传子

父组件
<son :title="name">
              <template #header><p>我是头部</p></template>
              <template #body><p>我是身体</p>
              </template>
              <template v-slot:[name]><p>我是脚部</p>
              </template>
            </son>
          </el-row>
子组件
<template>
  <div>
    我是子组件{{title}}
    <slot name="footer"></slot>
    <slot name='body'></slot>
    <slot name="header"></slot>
  </div>
</template>
<script>
export default {
  props: {
    title: String
  }
}
</script>

父组件传递的插槽内容是由子组件编译的,插槽作用域由子组件决定。
所以如果需要动态修改插槽的内容,就需要子组件传参给父组件。

3.2 子传父

父组件传参给子组件,props接收后,插槽slot再通过绑定属性传递参数返回给父组件,不管是模板代码还是数据,控制权完全掌握在父组件手里。

第一种方式

父组件
 <son :title="name">
              <template #header="header">{{header.header}}</template>
              <template #body="body">{{body.body}}
              </template>
              <template #footer="footer">{{footer.footer}}
              </template>
            </son>
子组件
<template>
  <div>
    我是子组件
    <slot name="footer" :footer="title.footer"></slot>
    <slot name='body' :body="title.body"></slot>
    <slot name="header" :header="title.header"></slot>
  </div>
</template>
<script>
export default {
  props: {
    title: Object
  }
}
</script>
样式

第二种方式

子组件通过属性 <slot :自定义属性名 = '值'></slot>,将自己内部的原始类型给到父组件;
父组件 <template slote-scope='自定义接收'></template>;
子组件 slot 除了要占个位置还要传递参数,父组件 slote-scope 负责接收参数;
父组件
 <son :list="provinces">
              <template slot-scope="slotProps">
                <h4 v-for="city in slotProps.cities" :key="city.id" >
                  城市: {{city.name}}
                </h4>
              </template>
            </son>
子组件
<template>
  <div class="footerComponent">
    <div v-for="item in list" :key="item.id">
      <h2>省份:{{item.name}}</h2>
      <slot :cities="item.cities"></slot>
    </div>
  </div>
</template>
<script>
export default {
  props: {
    title: Object,
    list: {
      type: Array,
      default: function() {
        return []
      }
    }
  }
}
</script>

父给子传 provinces,在son便签进行传,子组件接收用props,子给父传item.cities,父template用slot-scope接收。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端基础Vue项目中的插槽使用 的相关文章

随机推荐

  • TaskDecatator用法

    在Spring框架中 TaskDecorator 是一个接口 它可以用来自定义由 ThreadPoolTaskExecutor 或其他任务执行器管理的任务的装饰行为 这通常用于在执行任务之前和之后添加某些上下文相关的行为 比如设置线程上下文
  • 2023长三角(芜湖)人工智能数字生态峰会成功召开!

    聚焦当下 共议数字时代发展 瞩目未来 共谋数字生态蓝图 12月11日 2023长三角 芜湖 人工智能数字生态峰会暨2023长三角 芜湖 人工智能视觉算法大赛颁奖典礼在芜湖宜居国际博览中心盛大召开 本次大会是由安徽省数据资源管理局 安徽省科学
  • 【学习】python字典排序

    面临的任务是在字典的键key中存储文件地址 在值value中存储图片是某物的概率 之后找出概率最大的那一对儿 输出地址 prices ACME 45 23 AAPL 612 78 IBM 205 55 HPQ 37 20 FB 10 75
  • 百校保研数据解析会,助你打破保研信息差!

    写在前面 每年保研季 我们总会发现有 一些平常学业上很优秀的同学意外落榜 或是没有拿到推免资格 或是没有去到心仪的院校 在这些落榜的同学中 我们常常会听到这样的抱怨 我都不知道xx院也可以报名 原来xx项目直通夏令营 显然 这样的失误纯粹是
  • 教师工作内容和职责

    今天 我们聊聊那些默默奉献 为我们的成长保驾护航的老师们 他们的工作内容和职责远不止于课堂上的教学 还有许多不为人知的辛勤付出 教师们的主要工作就是教授知识 根据教材和课程大纲 为学生们准备丰富的学习内容 帮助大家掌握各种知识和技能 无论是
  • 一文了解Substrate

    Substrate是用于构建特定类型区块链的工具箱 它本身并不是一个区块链 而是开发者用来创建独特而强大的区块链的一套工具 Substrate允许开发者可以自己创建所需所想功能的区块链 无需受限于现有的设计 Substrate使用FRAME
  • k8s集群使用calico网络组件

    一 前言 k8s的网络组件可以使用flannel或者calico两种 flannel的配置比较简单 但是性能还是calico会更高一点 所以现在来介绍以下calico网络组件的部署 二 部署 k8s集群版本对calico的版本也有对应要求
  • 开源音频处理代码 speex

    Speex 是一套主要针对语音的开源免费 无专利保护的音频 压缩格式 speex是近年来开发出的一套功能强大的语音引擎 能够实现高质量和低 比特率 的编码 它不仅提供了基于码激励线性预测 CELP 算法的编 解码模块 而且在其最新发布的版本
  • 格式转换和图片缩放的图片格式转换器推荐,在线图片处理达人让图片批量处理更轻松

    在我们的日常工作中 图片处理是一项非常常见的任务 无论是设计 营销还是其他行业 都离不开对图片的处理 为了满足广大用户对图片处理的需求 我们推出了一款全新的软件 首助编辑高手 1 它是一款功能强大 操作便捷的图片编辑软件 旨在帮助用户高效地
  • 在职场中获得成就感的秘诀,分享关键因素

    在职场中 我们每个人都渴望获得成就感 成就感可以来自于完成一个项目 得到同事的认可 或者实现自我价值 然而 如何在职场中获得成就感并不是一件容易的事情 本文将探讨在职场中获得成就感的几个关键因素 一 明确的目标设定 在职场中获得成就感的第一
  • 7000字详解ERP管理系统!

    在当今竞争激烈的商业世界中 中小企业不仅需要保持灵活性 更需要高效管理企业资源 你可能听说过ERP系统 但它究竟是什么 它为何成为中小企业管理的 不二选择 又是如何助力中小企业 整合资源 提升效率 并在激烈的市场竞争中脱颖而出的 本文将为您
  • 数说CS | 夏令营只针对外校,拟录取人数持续增长!保研上交电院难度有所降低?

    写在前面 4个学科入选教育部双一流建设学科 第四轮学科评估中 7 个学科进入A档 招收哪些专业 保研录取情况如何 今天 岛主就带你深度揭秘 上海交通大学电子信息与电气工程学院 01 院校介绍 上海交通大学电子信息与电气工程学院的前身可溯源至
  • 上课助教老师的工作内容是什么

    作为一名曾经的教育工作者 我深知助教工作的重要性 不仅涉及到辅助教师完成教学任务 还承担着帮助学生理解 掌握知识的重任 那么 上课助教老师的工作内容具体是什么呢 以下是我的几点总结 辅助教学 助教老师首先要承担起辅助教学的责任 他们需要与主
  • Learn to Explain: Multimodal Reasoning viaThought Chains for Science Question Answering科学问答的思维链

    关于 ScienceQA 模仿 回答 ScienceQA 问题时的多跳推理过程 ScienceQA 展示了以下功能的实用性 语言模型中的 CoT 因为 CoT 在少样本 GPT 3 中将问答性能提高了 1 20 微调的 UnifiedQA
  • Postgresql中自增主键序列的使用以及数据传输时提示:错误:关系“xxx_xx_xx_seq“不存在

    场景 Postgresql在Windows中使用pg dump实现数据库 指定表 的导出与导入 Postgresql在Windows中使用pg dump实现数据库 指定表 的导出与导入 CSDN博客 上面讲使用pg dump进行postgr
  • 中学老师招聘条件和要求

    如果想当老师 这些条件和要求你一定得知道 那就是中学老师的招聘条件和要求 想成为一名优秀的中学老师吗 1学历要求 本科及以上学历 师范类专业优先考虑哦 毕竟专业的事还是要交给专业的人来做嘛 2 资格要求 必须持有教师资格证 这可是成为老师的
  • java 数组合并的10种方法

    在Java中 合并 或连接 数组是常见的任务 以下是10种不同的方法来实现数组的合并 首先是 10种方法的对比 1 使用 System arraycopy 方法 使用场景 当你需要快速 高效地合并两个数组时 优点 是Java标准库提供的方法
  • ElementUI el-tree 文件数据懒加载

    el tree 文件数据懒加载 div class moveFile div class treeBox div div
  • 【从服务器获取共享列表失败】【无法与设备或资源通信】解决方案!

    从服务器获取共享列表失败 背景 某项目搭建有samba共享 使用一段时间后 不知何种原因 客户端链接共享时报 从服务器获取共享列表失败 无效的参数 可参考解决方案A 银河麒麟samba共享文件 从服务器获取共享列表失败 解决方案 CSDN博
  • 前端基础Vue项目中的插槽使用

    概念 简单理解就是组件内部留一个或多个的插槽位置 可供组件传对应的模板代码进去 插槽的出现 让组件变的更加灵活 1 匿名插槽 父组件