Vue 03 组件通信

Vue学习

  • Vue 03
    • 01 浏览器本地存储
      • localStorage
      • SessionStorage
      • 案例 todolist的完善
    • 02 组件自定义事件Custom Events
      • 基本使用
      • 解绑自定义事件
      • 注意事项
      • 总结
      • 案例 todolist的完善
    • 03 全局事件总线GlobalEventBus
      • 案例 todolist的完善
    • 04 消息的订阅与发布
      • 案例 todolist的完善
    • 05 nextTick
    • 06 动画效果
      • 基本使用
      • 多个元素过渡
      • 第三方库 Animate.css
      • 总结

Vue 03

01 浏览器本地存储

localStorage 和 SessionStorage 统称为 webStorage。

  1. 存储内容大小一般支持5MB左右(不同浏览器可能还不一样)

  2. 浏览器端通过 Window.sessionStorage 和 Window.localStorage 属性来实现本地存储机制。

  3. 相关API:

    setItem、getItem、removeItem、clear

  4. 备注

① SessionStorage 存储的内容会随着浏览器窗口关闭而消失。

② LocalStorage 存储的内容,需要手动清除才会消失。

③ xxxxxStorage.getItem(xxx) 如果xxx对应的value获取不到,那么getltem的返回值是null。

④ JSON.parse(null) 的结果依然是 null。

localStorage

在这里插入图片描述

  • 示例
<body><h1>localStorage</h1><button class="btn">点我保存一个数据</button><button class="btn2">点我删除一个数据</button><button class="btn3">点我清空数据</button>
</body>
<script>let p = {name:'张三',age:16}document.querySelector('.btn').addEventListener('click',()=>{//存字符串window.localStorage.setItem('msg', 'hello!')// 存对象localStorage.setItem('person',JSON.stringify(p))// 读// localStorage.getItem('msg')console.log(localStorage.getItem('msg'));console.log(localStorage.getItem('person'));console.log(JSON.parse(localStorage.getItem('person')));// 当读取的key没有时,是null})document.querySelector('.btn2').addEventListener('click',()=>{//删除localStorage.removeItem('msg')})document.querySelector('.btn3').addEventListener('click',()=>{localStorage.clear()})
</script>

SessionStorage

API 和 localStorage 一样。getItem、SetItem、removeItem、clear(JSON.stringify、JSON.parse)

区别在关闭浏览器时,SessionStorage中存储的就失去

案例 todolist的完善

把数据存进localstorage中。本来是想 添加todo的时候,存入localstorage;删除todo的时候,在localstorage中删除。

但是不用这么麻烦,直接watch监视todos就可以了。

注意:监视的时候默认开启的不是深度监视

02 组件自定义事件Custom Events

JS 中的内置事件,如 keyup、click等,是给HTML元素使用的

自定义事件是给组件使用的。

基本使用

  • 示例

在这里插入图片描述

在这里插入图片描述

  • 另一种写法(这种写法更灵活)

在这里插入图片描述

子组件给父组件传递数据 总结:

① 通过父组件给子组件传递函数类型的props实现

② 通过父组件给子组件绑定一个自定义事件

注意

① 自定义事件也可以使用事件修饰符,比如 once

② 自定义事件可以传递参数。如果传递的参数很多,可以封装为对象,或者接收的时候,用拓展运算符

解绑自定义事件

原则和绑定自定义事件是一样的:在App.vue中给<Student/>组件绑定自定义事件,就去 <Student/>组件中触发事件、解绑事件

  • 示例

写法一:只适用于解绑单个事件
在这里插入图片描述

写法二:解绑多个事件要写在数组里

在这里插入图片描述

解绑所有的自定义事件:

在这里插入图片描述

补充之前的知识点:生命周期里面,销毁了当前组件实例,其实例里面的自定义事件(子组件和自组件的自定义事件)全部都不奏效了。但是原生的 JS 不受影响。

注意事项

App

school

student

  • student组件把名字发送给App后呈现在页面上,

因为绑定自定义事件有两种凡是,所以这个也有两种方式

在这里插入图片描述

在这里插入图片描述

但是上面的代码可能会出现问题。
在这里插入图片描述

这么写是错的.

vue规定,谁触发 atguigu 事件,那么回调函数中的 this 就是谁。本例是 student 组件触发的事件,所以this是student组件实例。

修改为箭头函数就可以了,因为箭头函数没有自己的this,就往外找,找到了 mounted函数的作用域

在这里插入图片描述

可以给组件绑定 JS 内置事件吗?
在这里插入图片描述

他会默认把click当成自定义事件。

默认是不触发的,但是可以在 student 组件中触发这个事件 this.$emit(‘click’)。

解决方法:使用native修饰符

在这里插入图片描述

总结

组件的自定义事件

1、一种组件间通信的方式,适用于:子组件===>父组件

2、使用场景:A是父组件,B是子组件,B想给A传数据,那么就要在A中给B绑定自定义事件(事件的回调在A中)。

3、绑定自定义事件:

在这里插入图片描述

注意:若想让自定义事件只能触发一次,可以使用once修饰符,或 $once方法。

4、触发自定义事件:this.$emit(‘atguigu’,数据)

5、解绑自定义事件:this.$off(‘atguigu’)

6、组件上也可以绑定原生DOM事件,需要使用native修饰符

7、注意:通过 this.$refs.xxx.$on('atguigu',回调)绑定自定义事件时,回调要么配置在methods中,要么用箭头函数,否则 this 的指向会出问题。

案例 todolist的完善

把所有子给父的传递 都变成自定义事件。

MyHeader添加一个todo之后,把新数据传递给 App

MyFooter中统计已完成/总计,把新数据传递给App

03 全局事件总线GlobalEventBus

任意组件通信。

在A中 给 X组件绑定一个自定义事件,会议回调函数demo是留在A中的。

D想给A传递数据,那就通过X demo

在这里插入图片描述

X得保证①所有组件都能看见它②有$on $off $emit

《一个重要的内置关系》 Vue的原型上

注意 Vue.extned创建的是 VueComponent构造函数,使用组件的时候:<组件>,才是实例

谁要接收数据,就由谁绑定事件且余留回调函数。谁要发送数据,就由谁触发事件。

全局事件总线 GlobalEventBus

1、一种组件间通信的方式,适用于任意组件间通信

2、安装全局事件总线:

在这里插入图片描述

3、使用事件组件:

在这里插入图片描述

4、最好在 beforeDestroy 钩子中,用$off 去解绑当前组件所用到的 事件

案例 todolist的完善

谁要接收数据,就由谁绑定事件且余留回调函数(在mounted的时候绑定最合适)。谁要发送数据,就由谁触发事件。

04 消息的订阅与发布

Publish–subscribe pattern

用于任意组件通信。

需要数据的组件:订阅消息。提供数据的组件:发送消息。

原生的 JS 里面不能实现订阅与发布,所以借助第三方库:pubsub-js。消息的订阅与发布是一种理念,要借助第三方库实现。

  • 以pubsub-js为例

npm i pubsub-js

import pubsub from 'pubsub-js'

pubsub 是一个对象,里面有方法 subscribe、 unsubscribe、 publish

在这里插入图片描述
在这里插入图片描述

  • 这里订阅消息时 的回调函数function 内没有this指针,可以写成箭头函数,这样this就指向组件实例了。
  • 回调函数的参数,第一个是固定的 消息名字;第二个才是参数 。可以在一个参数上用下划线占一个位置。

总结:消息订阅与发布(pubsub)

1、一种组件间通信的方式、适用于任意组件间通信

2、使用步骤:

① 安装pubsub npm i pubsub-js

② 引入import pubsub from 'pubsub-js'。一般第三方库要比组件库的引入前。

③ 接收数据:A组件想接收数据,则在A中订阅消息,消息的回调留在A中

在这里插入图片描述

④ 提供数据:pubsub.publish('xxx',数据)

⑤ 最好在 beforeDestroy 钩子中,用 PubSub.unsubscribe(pid) 去 取消订阅

案例 todolist的完善

  • 订阅功能

需要数据的地方订阅消息;提供数据的地方发送消息

vue开发工具不监测第三方库的事件,vue可以监听全局事件总线、自定义事件

  • 编辑功能

重点:直接在对象上添加一个属性,这个数据不是响应式的,vue无法监测

要使用 this.$set(todo,‘isEdit’,true)

05 nextTick

  • 编辑功能的输入框焦点

在这里插入图片描述

这一段的逻辑是,在点击了编辑按钮之后 input输入框出现,且该输入框得到焦点。

但是不起效,因为执行代码的时候从上到下执行完毕之后才解析模板,也就是在当页面上没有输入框的时候,就已经设置了焦点。

解决方法,可以设置一个定时器

在这里插入图片描述

更好的解决方法:

官方设置了一个API ,nextTick,它所维护的回调会在DOM节点更新完毕后再执行

在这里插入图片描述

  • nextTick 总结

作用:在下一次QOM更新结束后执行其指定的回调。

什么时候用:当改变数据后,要基于更新后的新DOM进行某些操作时,要在nextTick所指定的回调函数中执行。

06 动画效果

基本使用

在这里插入图片描述
在这里插入图片描述

  • 利用vue

在这里插入图片描述

  • 注:每一个过度transition可以起名字

在这里插入图片描述

  • 让最开始的时候就有动画,设置 appear属性为TRUE,这里要写v-bind,因为如果是 apper="true"表示的是字符串,v-bind:appear="true"才是等于双引号内的值
    在这里插入图片描述

  • 用vue写动画(之前是用CSS3写的)

一个元素向我们来的时候,vue规定了三个样式类名:来的起点、来的终点、来的过程。走的时候也是三个样式类名。

<template><div><button @click="isShow=!isShow">显示/隐藏</button><transition name="hello"><h1 v-show="isShow">你好啊</h1></transition></div>
</template><script>
export default {name: 'MyTest',data(){return {isShow: true}}
}
</script><style>
h1 {background-color: orange;/* 激活样式 方法一 *//* 哪个元素有动画就在哪里写transition *//* transition: 0.5s linear; */
}
/* 激活样式方法二 */
.hello-enter-active .hello-leave-active{transition: 0.5s linear;
}/* 进入的起点和离开的重点是一样的 */
.hello-enter .hello-leave-to{transform: translateX(-100%);
}/* 进入的终点和离开的起点一样 */
.hello-enter-to .hello-leave {transform: translateX(0);
}</style>

多个元素过渡

<transition>can only be used on a single element. Use <transition-group>for lists.

<transition-group>children must be keyed

在这里插入图片描述

第三方库 Animate.css

文档地址:https://animate.style/

①安装:npm install animate.css

② 引入,因为引入的是样式,所以import后面直接加上路径

在这里插入图片描述

总结

Vue封装的过度与动画

1、作用:在插入、更新或移除DOM元素时,在合适的时候给元素添加样式类名。

2、图示:

在这里插入图片描述

3、写法

① 准备好样式

元素进入的样式
v-enter 进入的起点
v-enter-active 进入过程中
v-enter-to 进入的终点元素离开的样式
v-leave 离开的起点
v-leave-active 离开过程中
v-leave-to 离开的重点

② 使用 <transition>包裹要过度的动画,并配置name属性

③ 备注:如果有多个元素需要过度,则需要使用 <transition-group>,且每个元素都要指定 key值。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络原理-传输层-UDP报文结构

本文介绍UDP报文 有很多友友搞不清楚UDP报文的详细结构还有TCP的详细结构,所以专门分开来讲 以免弄混. 首先我们先看一下整个UDP结构,让大家有一个全方面的认识 下面我们来详细解释UDP报 16位源端口号(本机):就是2字节大小,16个二进制位. 16位目的端口号(目的机):也是2字节…

SQL Server 数据库常见提权总结

前面总结了linux和Windows的提权方式以及Mysql提权&#xff0c;这篇文章讲讲SQL Server数据库的提权。 目录 基础知识 权限判定 系统数据库 存储过程 常见系统存储过程 常见扩展存储过程 xp_cmdshell扩展存储过程提权 xp_dirtree写入文件提权 sp_oacreate提权 xp_re…

Linux安装redis(基于CentOS系统,Ubuntu也可参考)

前言&#xff1a;本文内容为实操记录&#xff0c;仅供参考&#xff01; 一、下载并解压Redis 1、执行下面的命令下载redis&#xff1a;wget https://download.redis.io/releases/redis-6.2.6.tar.gz 2、解压redis&#xff1a;tar xzf redis-6.2.6.tar.gz 3、移动redis目录&a…

和数集团董事长唐毅一行参加香港加密峰会

2024年3月26日-27日&#xff0c;和数集团董事长唐毅、UM Company CEO Rubens、QUANTIX CAPITAL风险投资基金CEO Jake一行&#xff0c;参加了亚太地区重要的Web3会议“WOW Summit HongKong 2024”。 UM Company CEO Rubens、和数集团董事长唐毅、QUANTIX CAPITAL风险投资基金 CE…

【Java八股面试系列】中间件-Redis

目录 Redis 什么是Redis Redis解决了什么问题 Redis的实现原理 数据结构 String 常用命令 应用场景 List(列表) 常用命令 应用场景 Hash(哈希) 常用命令 应用场景 set(集合) 常见命令​编辑 应用场景 Sorted Set(有序集合) 常见命令​编辑 应用场景 数据持…

Day46:WEB攻防-注入工具SQLMAPTamper编写指纹修改高权限操作目录架构

目录 数据猜解-库表列数据&字典 权限操作-文件&命令&交互式 提交方法-POST&HEAD&JSON 绕过模块-Tamper脚本-使用&开发 分析拓展-代理&调试&指纹&风险&等级 知识点&#xff1a; 1、注入工具-SQLMAP-常规猜解&字典配置 2、注入…

助力低碳出行 | 基于ACM32 MCU的电动滑板车方案

前言 随着智能科技的快速发展&#xff0c;电动滑板车的驱动系统也得到了长足的发展。国内外的电动滑板车用电机驱动系统分为传统刷式电机和无刷电机两种类型。其中&#xff0c;传统的刷式电机已经逐渐被无刷电机所取代&#xff0c;无刷电机的性能和寿命都更出色&#xff0c;已成…

pandas数据保存与加载

安装操作Excel模拟数据写入编辑读取切片操作 统计 安装 pip install pandas pip install numpyExcel环境安装 pip install xlrd pip install xlwt pip install openpyxi操作Excel import pandas as pd 模拟数据 写入 import pandas as pd# 模拟需要写入的数据 dic{name:[…

【计算机网络篇】数据链路层(4.2)可靠传输的实现机制

文章目录 &#x1f354;可靠传输的实现机制⭐停止 - 等待协议&#x1f5d2;️注意 &#x1f50e;停止 - 等待协议的信道利用率&#x1f5c3;️练习题 ⭐回退N帧协议&#x1f388;回退N帧协议的基本工作流程&#x1f50e;无传输差错的情况&#x1f50e;超时重传的情况&#x1f5…

大话设计模式之迪米特法则

迪米特法则&#xff0c;也称为最少知识原则&#xff08;Law of Demeter&#xff09;&#xff0c;是面向对象设计中的一个重要原则&#xff0c;其核心思想是降低耦合度、减少对象之间的依赖关系&#xff0c;从而使系统更加灵活、易于维护和扩展。 根据迪米特法则&#xff0c;一…

【考研数学】线代跟张宇,还是李永乐?

干吗要做选择&#xff0c;你可以全部都要的嘛&#xff01; 基础阶段选张宇&#xff0c;强化阶段选李永乐&#xff0c;这样搭配可以说是最佳了。 先来说下两位老师各自的特点&#xff0c;张宇老师&#xff0c;讲线代通俗易懂&#xff0c;技巧运用得溜溜的。他的课&#xff0c;…

samba实现linux共享文件夹

一、samba安装 sudo apt install samba 二、配置Samba 编辑Samba配置文件sudo vi /etc/samba/smb.conf 在文件末尾添加以下内容&#xff0c;设置一个简单的共享目录&#xff08;替换path_to_share为实际的共享目录路径&#xff09;&#xff1a; [Share] path /path_to_sha…

Linux:详解TCP协议段格式

文章目录 认识TCPTCP协议段格式 本篇主要总结的是TCP协议的一些字段 认识TCP TCP协议全称是传输控制协议&#xff0c;也就是说是要对于数据的传输进行一个控制 以上所示的是对于TCP协议进行数据传输的一个理解过程 全双工 至此就可以对于TCP协议是全双工的来进行理解了&…

【计算机图形学】3D Implicit Transporter for Temporally Consistent Keypoint Discovery

对3D Implicit Transporter for Temporally Consistent Keypoint Discovery的简单理解 文章目录 1. 现有方法限制和文章改进2. 方法2.1 寻找时间上一致的3D特征点2.1.1 3D特征Transporter2.1.2 几何隐式解码器2.1.3 损失函数 2.2 使用一致特征点的操纵 1. 现有方法限制和文章改…

[2023] 14届

1.日期统计 题意 1.日期统计 - 蓝桥云课 (lanqiao.cn) 思路 用dfs扫 对每一个位进行限制 花了一个小时 注意把答案枚举出来 对应一下看到底对不对 code #include<iostream> #include<cstdio> #include<stack> #include<vector> #include<al…

VSCode 如何同步显示网页在手机或者平板上

首先要确保 ①电脑上安装了VsCode ②VsCode安装插件LiveServer 安装成功之后 连续按住 Alt L 、Alt O 会跳转到对应的html页面上 http://127.0.0.1:5500/....... 是这个开头的 然后打开网络 如果桌面有网上邻居的可以直接点桌面的网上邻居 进来找到WLAN这个…

为什么我的微信小程序 窗口背景色backgroundColor设置参数 无效的问题处理记录!

当我们在微信小程序 json 中设置 backgroundColor 时&#xff0c;实际在电脑的模拟器中根本看不到效果。 这是因为 backgroundColor 指的窗体背景颜色&#xff0c;而不是页面的背景颜色&#xff0c;即窗体下拉刷新或上拉加载时露出的背景。在电脑的模拟器中是看不到这个动作的…

智能工具管理系统-智能工具柜系统

智能工具管理系统-智能工具柜系统 智能工具可视化管理系统(智工具DW-S308)是依托互3D技术、云计算、大数据、RFID技术、数据库技术、AI、视频分析技术对RFID工具进行统一管理、分析的信息化、智能化、规范化的系统。 一、工具管理现状 东识RFID工具管理系统是一种便捷化的工具…

C# 高级文件操作与异步编程探索(初步)

文章目录 文本文件的读写探秘StreamReader 类深度剖析StreamWriter 类细节解读编码和中文乱码的解决方案 二进制文件的读写BinaryReader 类全面解析BinaryWriter 类深度探讨 异步编程与C#的未来方向同步与异步&#xff1a;本质解读Task 的神奇所在async/await 的魔法 在现代编程…

【ESP32S3 Sense接入语音识别+MiniMax模型对话】

1. 前言 围绕ESP32S3 Sense接入语音识别MiniMax模型对话展开&#xff0c;首先串口输入“1”字符&#xff0c;随后麦克风采集2s声音数据&#xff0c;对接百度在线语音识别&#xff0c;将返回文本结果丢入MiniMax模型&#xff0c;进而返回第二次结果文本&#xff0c;实现语言对话…