插槽的使用!!

news2024/10/5 14:18:42

什么是插槽

插槽(Slot)是 vue 为组件的封装者提供的能力。允许开发者在封装组件时,把不确定的、希望由用户指定的部分定义为插槽。可以把插槽认为是组件封装期间,为用户预留的内容的占位符
即:使用者来决定某一块区域到底存放什么内容和元素

一、认识插槽

 这个时候我们就可以使用插槽

  • 插槽的使用过程其实是抽取共性、预留不同
  • 将共同的元素、内容依然在组件内进行封装
  • 将不同的元素使用slot作为占位,让外部决定到底显示什么元素

二、使用插槽

vue中将<slot>元素作为承载分发内容的出口,使用<slot>就可以为封装组件开启一个插槽

1、普通插槽
插槽组件

<template>
  <div>
    <h2>组件开始</h2>
    <!-- 安放一个插槽,可以使用默认值,若没有东西插进来就显示这个-->
    <slot>333</slot>
    <h2>组件结束</h2>
  </div>
</template>

<script>
  export default {};
</script>
<style scoped></style>

使用插槽

<template>
  <div class="HelloWorld-layout">
    <div>HelloWorld</div>
    <!-- 中间不写内容,显示默认内容 -->
    <my-slot></my-slot>
    <!-- 覆盖默认值 中间也可以插入文本、自定义组件,各种东西~ -->
    <my-slot>
      <h1>哈哈哈</h1>
    </my-slot>
  </div>
</template>
<script>
import MySlot from './mySlot.vue';
export default {
  name: 'HelloWorld',
  components: { MySlot }
};
</script>
<style scoped></style>

查看效果

2、具名插槽 

给插槽绑定一个name属性,也就是取个名字,使用的时候可以找到对应的插槽把内容放入
插槽组件

<template>
  <div class="nav-bar">
    <div class="default">
      <!-- 其实这样默认名字是default  <slot name="default"></slot> -->
      <slot></slot>
    </div>
    <div class="left">
      <!-- 定义左边的插槽 -->
      <slot name="left"></slot>
    </div>
    <div class="center">
      <!-- 定义中间的插槽 -->
      <slot name="center"></slot>
    </div>
    <div class="right">
      <!-- 定义右边的插槽 , 使用传递过来的name值来动态绑定 -->
      <slot :name="dynamicSlotName"></slot>
    </div>
  </div>
</template>
<script>
export default {
  props: {
    // 接受父组件的传值
    dynamicSlotName: {
      type: String,
      default: ''
    }
  }
};
</script>
<style scoped>
.nav-bar {
  display: flex;
  text-align: center;
}
.default,
.left,
.center,
.right {
  flex: 1;
}
</style>

使用插槽

<template>
  <div class="HelloWorld-layout">
    <!-- 传递一个动态的name过去 -->
    <my-slot :dynamic-slot-name="dynamicSlotName">
      <!-- 找到默认的插槽  和这个是一样的  <template v-slot:default> 我是left </template>-->
      <span>我找默认的插槽</span>
      <!-- 找到名称为left的插槽 -->
      <template v-slot:left> 我是left </template>
      <!-- 找到名称为center的插槽  这是语法糖(简便写法) -->
      <template #center> 我是center </template>
      <!-- 找到名称为right的插槽 , 使用变量来绑定 -->
      <template #[dynamicSlotName]> 我是right </template>
    </my-slot>
  </div>
</template>
<script>
import MySlot from './mySlot.vue';
export default {
  name: 'HelloWorld',
  components: { MySlot },
  data() {
    return {
      dynamicSlotName: 'right'
    };
  }
};
</script>
<style scoped></style>

查看效果

3、作用域插槽
在vue中有渲染作用域的概念

  • 父级模版里的所有内容都是在父级作用域中编译的
  • 子模版里的所有内容都是在子作用域中编译的

tip : 也就是说,在父组件中是访问不到子组件的内容的,虽然在父组件中使用了插槽,内容是插进了子组件中,但是还是不能访问子组件中定义的变量
插槽组件 

<template>
  <div class="nav-bar">
    <!-- 注意,这里是子组件,给子组件的slot上绑定上一个数据 -->
    <slot name="bar" :title-arr="titleArr"></slot>
 
    <!-- 默认插槽 -->
    <slot :default-arr="defaultArr"></slot>
  </div>
</template>
<script>
export default { 
  data() {
    return {
      titleArr: ['a', 'b', 'c', 'd'],
      defaultArr: ['d', 'e', 'f', 'a', 'u', 'l', 't']
    };
  }
};
</script>
<style scoped>
.nav-bar {
  display: flex;
  flex-direction: column;
  text-align: center;
}
</style>

使用插槽

<template>
  <div class="HelloWorld-layout">
    <my-slot>
      <!-- 使用具名插槽的同时,使用子组件中传递过来的数据,数据都放在slotProps这个对象中 -->
      <template #bar="slotProps">
        <!-- 取出slotProps中我们绑定的titleArr变量,进行使用 -->
        <ul class="nav">
          <li class="item" v-for="item in slotProps.titleArr" :key="item">{{ item }}</li>
        </ul>
        <!-- 从插槽里面拿出数据,可以在外部自己控制用什么来包裹 -->
        <div class="button-box">
          <button v-for="item in slotProps.titleArr" :key="item">{{ item }}</button>
        </div>
      </template>
    </my-slot>
 
    <!-- 当只使用默认插槽(没有取名字时),只使用一个,可以简写成这样(不写template)   官方名称 : 独占默认插槽的缩写-->
    <my-slot v-slot="slotProps">
      <div class="default-box">
        <span v-for="item in slotProps.defaultArr" :key="item">{{ item }}</span>
      </div>
    </my-slot>
  </div>
</template>
<script>
import MySlot from './mySlot.vue';
export default {
  name: 'HelloWorld',
  components: { MySlot }
};
</script>
<style scoped>
.nav {
  width: 100%;
  display: flex;
  padding: 0;
  margin-left: 8px;
  list-style: none;
}
.item,
.button-box button,
.default-box span {
  flex: 1;
  height: 60px;
  line-height: 60px;
  background-color: skyblue;
  margin-right: 8px;
  margin-top: 30px;
}
.button-box,
.default-box {
  width: 100%;
  display: flex;
  margin-left: 8px;
}
.button-box button {
  background-color: red;
  border: none;
  cursor: pointer;
}
</style>

查看效果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/763390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开利网络拜访番禺前后仓国际珠宝基地,以数字化技术赋能产业升级

近日&#xff0c;开利网络拜访位于番禺的前后仓国际珠宝基地&#xff0c;对基地目前的数字化需求和产业升级方向进行了解和探讨。目前&#xff0c;基地拥有以数字贸易综合服务中心&#xff0c;以人才、流量、运营、金融为抓手&#xff0c;以供应链选品、直播电商、跨境电商为媒…

【C++医学影像PACS】CT检查中的三维重建是什么检查?

一、【PACS影像科普】CT检查中的三维重建是什么检查&#xff1f; 三维重建是多层螺旋CT的一个最大的优点&#xff0c;也是影像工作多年来&#xff0c;从横断解剖到多平面&#xff0c;乃至立体的一次飞跃&#xff0c;让抽象变的形象&#xff0c;大大地提高了准确性&#xff0c;为…

大数据测试之数据仓测试怎么做(下)

前面的文章我们为大家介绍了一个常见的互联网大厂的数据仓的技术框架&#xff0c;也就是下面这张图所展示的内容。 为大家介绍了从操作数据层&#xff0c;到DW层&#xff0c;再到汇总数据层&#xff0c;最后到维度层和数据应用层的整个流程。本文我们将整个架构打平来展示制作…

我们正在开发一套组件库,欢迎你的加入~

项目地址 github地址 可以先点进来康康~ 技术栈 目前我们整体采用的是vue3typescriptless作为整体的开发的选择 需要说的是&#xff0c;我们并没有采用很多组件库采用的TSX的写法&#xff0c;而是选择了SFC的写法&#xff0c;这是因为我们觉得对于大部分的vue开发者来说&am…

用得最多的企业文件加密软件【企业文件加密软件前十】

企业文件加密软件是一种专门设计用于保护企业敏感信息的软件工具。它通过使用加密算法将企业的文件、文件夹和移动设备上的数据转化为不可读的格式&#xff0c;以防止未经授权的访问和数据泄露。这些软件通常提供了多种加密算法和安全控制选项&#xff0c;以满足不同企业的安全…

国外访问学者博士后常用的网络视频面试软件

面试是获得邀请函的重要环节&#xff0c;随着网络的广泛应用&#xff0c;现在视频面试逐渐取代了电话面试&#xff0c;本篇知识人网小编介绍几种国外访问学者博士后常用的网络视频软件。 在申请国外博士后或者访问学者职位时&#xff0c;当接收方导师收到CV&#xff08;简历&am…

postgis上传 上千个资源文件

需求背景所需工具解决流程1. 获取文件名信息2.复制到 excel 表格中3.转成 csv 文件 需求背景 需要把上千个文件资源上传到远端&#xff0c;并建立数据表 所需工具 Notepad 7wps office 11.1.0 解决流程 1. 获取文件名信息 复制文件路径&#xff0c;在 cmd 中进到文件夹&…

Python程序设计基础:列表与元组(二)

文章目录 一、数值列表的生成1、通过input()函数输入创建列表2、通过list()函数转换3、列表生成式4、数值列表的几种统计计算 二、元组1、元组的定义2、元组的操作3、元组作为列表元素 三、转换函数1、元组和列表之间的转换2、字符串和列表之间的转换3、split()方法 一、数值列…

深度学习模型:Pytorch搭建ResNet、DenseNet网络,完成一维数据分类任务

2023.7.17 DenseNet和ResNet都是深度学习中常用的网络结构&#xff0c;它们各有优缺点。 DenseNet的优点是可以充分利用网络中的信息&#xff0c;因为每个层都可以接收来自前面所有层的信息。这种密集连接的结构可以提高网络的准确性&#xff0c;减少过拟合的风险。此外&…

教你一招,动态规划思想

动态规划 什么是动态规划&#xff1f; 动态规划也是算法设计的一种方法/思想。它将一个问题分解为相互重叠的子问题&#xff0c;通过反复求解子问题&#xff0c;来解决原来的问题。 基础案例 场景一 斐波那契数列 当前数等于前面两个数的和。 定义子问题&#xff1a;f(n)…

Python异步网络编程框架Twisted使用方法

Twisted概念 Twisted是一个Python异步网络编程框架&#xff0c;它可以帮助我们开发高性能的网络应用程序。它提供了一些基本概念&#xff0c;如reactor、protocol、transport和factory等&#xff0c;用于构建高效的网络应用程序。 优点&#xff1a; 异步并发处理&#xff1a…

Ceph集群

目录 一、存储概述 1.单机存储设备 1.1 DAS 1.2 NAS 1.3 SAN 2. 单机存储的问题 3. 商业存储解决方案 4.分布式存储&#xff08;软件定义的存储 SDS&#xff09; 4.1 分布式存储的类型 二、Ceph简介 1.Ceph 优势 2. Ceph 架构 2.1 RADOS 基础存储系统 2.2 LIBRADOS…

Arch - 多线程设计架构模式

文章目录 概述细节 概述 多线程设计架构模式是一种通过合理地使用线程来提高系统性能和响应能力的设计模式。以下是一些常见的多线程设计架构模式&#xff1a; 线程池模式&#xff1a;通过预先创建一组线程&#xff0c;将任务提交到线程池中执行&#xff0c;避免了线程的频繁创…

Perforce Helix Core新版本推出资源压力感知功能,提升服务器可用性,助力大规模开发

您的版本控制系统帮助团队进行主动监控吗&#xff1f; Perforce Helix Core的客户经常在不同维度上测试规模和性能的极限。其中一些维度包括文件数量、文件大小、用户数和并发事务数量。随着这些维度的压力增加&#xff0c;服务器资源&#xff08;如内存和CPU&#xff09;通常…

时刻领先丨PingCAP 用户峰会 2023 圆满收官

7 月 13 日&#xff0c;PingCAP 用户峰会 2023 在北京西南华邑酒店成功举办。 大会有哪些精彩看点&#xff0c;快跟小编来看看吧&#xff01; 提升中国开源数据库在国际市场的影响力和竞争力 倪光南 中国工程院院士 在全球数字科技创新的浪潮中&#xff0c;数据库作为核心数…

EVO 工具常见使用记录

计算ATE 第一种 evo_ape tum GT_robot_0.txt robot0_estimated.txt --plot --plot_mode xyz --align_origin第二种 evo_ape tum GT_robot_0.txt robot0_estimated.txt --plot --plot_mode xyz -a参数解析 GT pose 跟 estimated pose 文件的相对顺序。先 GT pose 的文件…

Boojum:zkSync的高性能去中心化STARK证明系统

1. 引言 2023年7月17日zkSync官方twitter Say hello to Boojum宣称在不regenesis的情况下&#xff0c;将zkSync Era迁移至Boojum证明系统。 Boojum为STARK证明系统&#xff08;PlonkFRI&#xff09;&#xff0c;开源代码见&#xff1a; https://github.com/matter-labs/era-…

【kubernetes系列】Kubernetes之调度器和调度过程

Kubernetes之调度器和调度过程 概述 当用户请求向API server创建新的Pod时&#xff0c;API server检查授权、权限等没有任何问题的话&#xff0c;他会把这个请求交由Scheduler&#xff0c;由Scheduler检查所有符合该Pod要求的列表&#xff0c;开始执行Pod调度逻辑&#xff0c…

mongdb基本操作

如果要查看刚刚创建的数据库 创建集合class 将数据插入 进行查找练习 查看班级所有人信息 db.class.find()查看班级中年龄为10岁的学生信息 db.class.find({age:10})查看年龄大于10岁的学生信息 用到范围条件查询 db.class.find({age:{$gt:10}})查看年龄在 4—8岁之间的学…

Jetpack入门:DataBinding

目录 一、DataBinding简介 设置 Data Binding 数据绑定表达式 双向绑定 二、例子 例1&#xff1a;DataBinding实现文本绑定和点击事件 MainActivity &#xff1a; CountStart &#xff1a; Food: OnClickListener &#xff1a; activity_main: build.gradle: 运行结果…