插槽Slot的作用和基本使用;具名插槽的使用;作用域插槽Slot使用;全局事件总线使用;依赖注入Provide/Inject

news2024/11/25 4:59:15

目录

  • 1_插槽Slot的作用
    • 1.1_认识插槽Slot
    • 1.2_如何使用插槽slot
    • 1.3_插槽的默认内容
    • 1.4_多个插槽的效果
  • 2_插槽Slot基本使用
  • 3_具名插槽的使用
  • 4_作用域插槽Slot使用
    • 4.1_渲染作用域
    • 4.2_认识作用域插槽
    • 4.3_独占默认插槽的缩写
  • 5_全局事件总线使用
    • 5.1_全局事件总线mitt库
    • 5.2_使用事件总线工具
  • 6_依赖注入Provide/Inject(了解)
    • 6.1_介绍
    • 6.2_Provide和Inject基本使用
    • 6.3_处理响应式数据

1_插槽Slot的作用

1.1_认识插槽Slot

在开发中,会经常封装一个个可复用的组件:

  • 虽然可以通过props传递给组件一些数据,让组件来进行展示;
  • 但是为了让这个组件具备更强的通用性,不能将组件中的内容限制为固定的div、span等等这些元素;
  • 比如某种情况下使用组件,希望组件显示的是一个按钮,某种情况下使用组件希望显示的是一张图片;
  • 应该让使用者可以决定某一块区域到底存放什么内容和元素;

举个栗子:假如定制一个通用的导航组件 - NavBar

  • 这个组件分成三块区域:左边-中间-右边,每块区域的内容是不固定;
  • 左边区域可能显示一个菜单图标,也可能显示一个返回按钮,可能什么都不显示;
  • 中间区域可能显示一个搜索框,也可能是一个列表,也可能是一个标题,等等;
  • 右边可能是一个文字,也可能是一个图标,也可能什么都不显示;

1.2_如何使用插槽slot

定义插槽slot:

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

如何使用slot呢?

  • Vue中将 <slot> 元素作为承载分发内容的出口;
  • 在封装组件中,使用特殊的元素<slot>就可以为封装组件开启一个插槽;
  • 该插槽插入什么内容取决于父组件如何使用;

在这里插入图片描述


1.3_插槽的默认内容

有时候希望在使用插槽时,如果没有插入对应的内容,那么需要显示一个默认的内容。 当然这个默认的内容只会在没有提供插入的内容时,才会显示;

在App.vue设置一个空的插槽组件,然后在子组件设置想要显示的默认内容

在这里插入图片描述


1.4_多个插槽的效果

当代码格式及逻辑正确,默认情况下每个插槽都会获取到对应插入的内容来显示;


2_插槽Slot基本使用

如下图演示
在这里插入图片描述


3_具名插槽的使用

希望达到的效果是插槽对应的显示,这个时候就可以使用 具名插槽:

  • 具名插槽顾名思义就是给插槽起一个名字,<slot> 元素有一个特殊的attribute:name
  • 一个不带 name 的slot,会带有隐含的名字 default

在这里插入图片描述


动态插槽名

上面使用的插槽名称都是固定的,但是可以通过 v-slot:[dynamicSlotName]方式动态绑定一个名称

在这里插入图片描述


4_作用域插槽Slot使用

4.1_渲染作用域

在Vue中有渲染作用域的概念:

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

如何理解这句话呢?来看一个案例:

  • 在的案例中ChildCpn自然是可以让问自己作用域中的title内容的;
  • 但是在App中,是访问不了ChildCpn中的内容的,因为它们是跨作用域的访问

在这里插入图片描述


4.2_认识作用域插槽

有时候希望插槽可以访问到子组件中的内容是非常重要的:

  • 当一个组件被用来渲染一个数组元素时,使用插槽,并且希望插槽中没有显示每项的内容;
  • 这个Vue给提供了作用域插槽;

来看下面的一个案例:

  • 在App.vue中定义好数据
  • 传递给ShowNames组件中
  • ShowNames组件中遍历names数据
  • 定义插槽的prop
  • 通过v-slot:default的方式获取到slot的props
  • 使用slotProps中的item和index

在这里插入图片描述


4.3_独占默认插槽的缩写

默认插槽default,在使用的时候 v-slot:default="slotProps"可以简写为v-slot=“slotProps”。可以简写,但前提是自己能看懂,一般不建议简写。

<show-names : names="names">
    <template v-slot="slotProps">
	<span>{{slotProps.item}}-f{slotProps.index}}</span>
     </template>
< /show-names>

并且如果的插槽只有默认插槽时,组件的标签可以被当做插槽的模板来使用,这样,就可以将 v-slot 直接用在组件上

<show-names :names="names" v-slot="slotProps">
    <span>{islotProps.item}}-f{slotProps.index}}</span>
</ show-names>


5_全局事件总线使用

非父子组件的通信

在开发中,构建了组件树之后,除了父子组件之间的通信之外,还会有非父子组件之间的通信,主要有两种方式:

  • 全局事件总线;
  • Provide/Inject;

5.1_全局事件总线mitt库

Vue3从实例中移除了 o n 、 on、 onoff 和 $once 方法,所以如果希望继续使用全局事件总线,要通过第三方的库:

  • Vue3官方有推荐一些库,例如 mitt 或 tiny-emitter;
  • 此处用 hy-event-store

安装库

npm install hy-event-bus

封装eventbus.js

import { HYEventBus } from 'hy-event-store'

const eventBus = new HYEventBus()

export default eventBus

5.2_使用事件总线工具

总的来说,无论使用哪个库,本质都是三个关键函数

  • 事件监听 on
  • 时间发射 emit
  • 事件取消监听 off

在这里插入图片描述


6_依赖注入Provide/Inject(了解)

6.1_介绍

Provide/Inject用于非父子组件之间共享数据:

  • 比如一些深度嵌套的组件,子组件想要获取父组件的部分内容;
  • 在这种情况下,如果仍然将props沿着组件链逐级传递下去,就会非常的麻烦;

对于这种情况下,可以使用 Provide 和 Inject :

  • 无论层级结构有多深,父组件都可以作为其所有子组件的依赖提供者;
  • 父组件有一个 provide 选项来提供数据;
  • 子组件有一个 inject 选项来开始使用这些数据;

在这里插入图片描述

实际上,可以将依赖注入看作是“long range props”,除了:

  • 父组件不需要知道哪些子组件使用它 provide 的 property
  • 子组件不需要知道 inject 的 property 来自哪里

6.2_Provide和Inject基本使用

假设文件结构是这样:App.vue–> Home.vue --> HomeBanner.vue

在这里插入图片描述

注意,Provide中提供的一些数据是来自data,若想通过this来获取,用箭头函数来获取,否则会报错


6.3_处理响应式数据

上面6.2的图片中,provide使用了来自data的message,是通过计算属性computed来使用。这是为了处理message被改变时,provide里面message也能即时改变。也就是使用computed处理响应式数据

若不使用computed,那么provide里面message不能能即时改变。

但是,computed处理的数据会被包裹(因为其返回的时ref对象),比如message会被包裹一对双引号,双引号也显示在浏览器,若不想要双引号,需要使用computed的value属性。即message.value

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

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

相关文章

Java多线程编程中的线程间通信

Java多线程编程中的线程间通信 基本概念&#xff1a; ​ 线程间通信是多线程编程中的一个重要概念&#xff0c;指的是不同线程之间如何协调和交换信息&#xff0c;以达到共同完成任务的目的。 线程间通信的目的 ​ 是确保多个线程能够按照一定的顺序和规则进行协作&#xff…

二、linux虚拟机配置中文输入法和如何下载软件

&#xff08;一&#xff09;配置中文输入法&#xff1a; 1、sudo apt-get install fcitx&#xff0c;安装fcitx框架&#xff0c;安装完成之后&#xff0c;选择该框架 2、接下来输入sudo apt-get install fcitx fcitx-googlepinyin&#xff0c;安装谷歌输入法之后&#xff0c;重…

分布式 - 消息队列Kafka:Kafka 消费者消息消费与参数配置

文章目录 1. Kafka 消费者消费消息01. 创建消费者02. 订阅主题03. 轮询拉取数据 2. Kafka 消费者参数配置01. fetch.min.bytes02. fetch.max.wait.ms03. fetch.max.bytes04. max.poll.records05. max.partition.fetch.bytes06. session.timeout.ms 和 heartbeat.interval.ms07.…

ubuntu环境上搭建ros2

环境搭建 设置系统区域。 首先需要确保安装环境支持 UTF-8 格式 sudo apt install locales sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALLen_US.UTF-8 LANGen_US.UTF-8 export LANGen_US.UTF-8 locale添加 ROS2 的代码仓库 设置你的sources.list&#xff0…

leetcode 面试题 02.05 链表求和

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;面试题 02.05 链表求和 ps&#xff1a; 首先定义一个头尾指针 head 、tail&#xff0c;这里的 tail 是方便我们尾插&#xff0c;每次不需要遍历找尾&#xff0c;由于这些数是反向存在的&#xff0c;所以我们直接加起来若…

【Kubernetes】Kubernetes的PV和PVC的用法

PV、PVC 前言一、 存储卷1. emptyDir 存储卷1.1 概念1.2 实例 2. hostPath 存储卷2.1 概念2.2 实例 3. nfs共享存储卷 二、PV 和 PVC1. 概念1.1 PV1.2 PVC1.3 PVC 的使用逻辑1.4 创建机制1.5 PV 和 PVC 的生命力周期1.6 创建及销毁 PV 的流程 2. PV 和 PVC 的创建2.1 查看定义2…

PC-3000 Flash、Flash_Extractor、VNR信号的术语和编号 / 软件教程

PC-3000 Flash、Flash_Extractor、VNR信号的术语和编号 / 软件教程 PC-3000 Flash、Flash_Extractor、VNR信号的术语和编号 PC-3000 Flash、Flash_Extractor、VNR信号的术语和编号 许多客户在解决方案库中阅读整体方案时遇到问题。那么&#xff0c;如何正确读取它们并将内存芯片…

FinOps 应用入门指南

入门指南介绍 什么是 FinOps &#xff1f; FinOps 是一种云成本管理和优化的解决方案&#xff0c;并为组织、企业、团队提供了系统化的方法论&#xff0c;其中每个人都应该对自己的云资源成本负责。 FinOps 是“Finance”和“DevOps”的合成词&#xff0c;强调业务团队和研发…

因果推断(四)断点回归(RD)

因果推断&#xff08;四&#xff09;断点回归&#xff08;RD&#xff09; 在传统的因果推断方法中&#xff0c;有一种方法可以控制观察到的混杂因素和未观察到的混杂因素&#xff0c;这就是断点回归&#xff0c;因为它只需要观察干预两侧的数据&#xff0c;是否存在明显的断点…

秒杀库存解决方案

电商系统中秒杀是一种常见的业务场景需求&#xff0c;其中核心设计之一就是如何扣减库存。本篇主要分享一些常见库存扣减技术方案&#xff0c;库存扣减设计选择并非一味追求性能更佳&#xff0c;更多的应该考虑根据实际情况来进行架构取舍。在商品购买的过程中&#xff0c;库存…

8.14 ARM

1.练习一 .text 文本段 .global _start 声明一个_start函数入口 _start: _start标签&#xff0c;相当于C语言中函数mov r0,#0x2mov r1,#0x3cmp r0,r1beq stopsubhi r0,r0,r1subcc r1,r1,r0stop: stop标签&#xff0c;相当于C语言中函数b stop 跳转到stop标签下的第一条…

Maven 基础之依赖管理、范围、传递、冲突

文章目录 关于依赖管理坐标和 mvnrepository 网站pom.xml 中"引"包 依赖范围依赖传递依赖冲突 关于依赖管理 坐标和 mvnrepository 网站 在 maven 中通过『坐标』概念来确定一个唯一确定的 jar 包。坐标的组成部分有&#xff1a; 元素说明<groupId>定义当前…

2023国赛数学建模思路 - 复盘:光照强度计算的优化模型

文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米&#xff0c;宽为12米&…

HTB-Keeper

HTB-Keeper 信息收集80端口 lnorgaardroot 信息收集 80端口 80主页给了一个跳转的链接 跟随链接后到了一个登陆界面。 尝试搜索默认密码。 通过账号root:password登录。不知道为什么我登陆了两次才成功。 通过搜索在Admin->Users->Select里面发现了用户信息。 lno…

安全 1自测

常见对称加密算法&#xff1a; DES&#xff08;Data Encryption Standard&#xff09;&#xff1a;数据加密标准&#xff0c;速度较快&#xff0c;适用于加密大量数据的场合&#xff1b; 3DES&#xff08;Triple DES&#xff09;&#xff1a;是基于DES&#xff0c;对一块数据用…

HashMap源码 学习日志

我们先看一下默认的 HashMap的设置 什么是 加载因子&#xff1f; HashMap的底层是哈希表&#xff0c;是存储键值对的结构类型&#xff0c;它需要通过一定的计算才可以确定数据在哈希表中的存储位置&#xff1a; static final int hash(Object key) {int h;return (key nul…

Tree相关

1.树相关题目 1.1 二叉树的中序遍历&#xff08;简单&#xff09;&#xff1a;递归 题目&#xff1a;使用中序遍历二叉树 思想&#xff1a;按照访问左子树——根节点——右子树的方式遍历这棵树&#xff0c;而在访问左子树或者右子树的时候我们按照同样的方式遍历&#xff0…

如何选择适合企业的文档在线管理系统?

在当今数字化时代&#xff0c;企业文档承载了大量的信息和数据&#xff0c;因此选择适合企业的文档在线管理系统至关重要。一个合适的文档管理系统可以提高工作效率、加强信息安全和团队协作能力&#xff0c;下面将介绍如何选择适合企业的文档在线管理系统。 1. 功能需求 首先…

全网小说下载器,只需书名,一键下载(Python爬虫+tkinter 实现)小白实战案例系统教学!

大家好&#xff0c;我是小曼呐 前言 ttkbootstrap是一个基于Python的开源库&#xff0c;用于创建漂亮且交互式的GUI应用程序。它是在Tkinter框架之上构建的&#xff0c;提供了一系列的Widget组件和样式&#xff0c;可以帮助开发者快速构建现代化的用户界面。 今天做的是这个…

JavaScript如何执行语句

目录 语法/词法分析 预编译 解释执行 预编译什么时候发生 js运行三步曲 预编译前奏 预编译步骤 巩固基础练习 语法/词法分析 按语句块的粒度解析成抽象语法树 ,分析该js脚本代码块的语法是否正确&#xff0c;如果出现不正确&#xff0c;则向外抛出一个语法错误&#x…