Vue2(九):浏览器本地存储、组件自定义事件、TodoList自定义事件

一、浏览器本地存储(WebStorage)

存储内容大小一般支持5MB左右(不同浏览器可能还不一样)
浏览器端通过 Window.sessionStorage 和 Window.localStorage 属性来实现本地存储机制。

1.相关API

(1) xxxxxStorage.setItem('key', 'value');该方法接受一个键和值作为参数,会把键值对添加到存储中,如果键名存在,则更新其对应的值。
(2) xxxxxStorage.getItem('person');该方法接受一个键名作为参数,返回键名对应的值。
(3) xxxxxStorage.removeItem('key');该方法接受一个键名作为参数,并把该键名从存储中删除。
(4)xxxxxStorage.clear()该方法会清空存储中的所有数据。

2.一些注意点

(1)SessionStorage存储的内容会随着浏览器窗口关闭而消失。
(2) LocalStorage存储的内容,需要手动清除才会消失(调用clear或者清除缓存)。
(3) xxxxxStorage.getItem(xxx)如果xxx对应的value获取不到,那么getItem的返回值是null。
(4)JSON.parse(null)的结果依然是null。

3.TodoList的本地存储

将我们写的案例里的数据存一份到本地数据当中去

我想的是在添加todos的地方再写个添加数据,删除再写删除、、、比较麻烦,用watch监视,然后把最新的todos直接给本地数据就行

watch:{todos(newvalue){localStorage.setItem('todos',JSON.stringify(newvalue))//JSON.stringify将Js对象或值转换为JSON格式化的字符串}}

这么写的话数据是保存了但是一刷新还是什么数据都没有,因为我们默认的最开始数组就是空

todos:JSON.parse(localStorage.getItem('todos')) || []//要是什么都没有todos就不是空数组而是null了,那就会报错,空数组还得往下传,所以或一下//JSON.parse将格式完好的json字符串转换为json对象

做完之后又发现打勾之后再刷新勾就没有了,因为只是表层监视了一下,所以得深层监视

watch:{// todos(newvalue){//   localStorage.setItem('todos',JSON.stringify(newvalue))//   //这样写的话监视只是表层监视,如果你打勾了刷新就没勾了// }todos:{deep:true,handler(newvalue){localStorage.setItem('todos',JSON.stringify(newvalue))}}}

二、组件自定义事件

自定义事件是给组件用的

儿子给父亲传递数据

1.父亲先给儿子传递函数

app父亲:

<mySchool :getSchoolName="getSchoolName"/>
methods: {getSchoolName(name){console.log(name)},

儿子:

<button @click="get(name)">点我获取学校名字</button>
props:['getSchoolName'],
methods:{get(name){this.getSchoolName(name)}}

2.绑定一个自定义事件

(1)v-on

app:

<myStudent v-on:atguigu="getStudentName"/>
<!-- 给student这个组件的实例对象vc身上绑定,有人触发事件调函数 -->
getStudentName(name){console.log(name)},

儿子:给谁绑的就找谁触发

<button @click="sendStudentName">点我发送student名字</button>
methods:{sendStudentName(){//emit是触发student组件实例vc的atguigu事件 this.$emit('atguigu',this.name)}}

相同点:都得配置回调函数

不同点,props得往子组件传东西然后子组件亲自收到并调用,但是自定义事件不给儿子传东西,而是给他绑定自定义事件,然后当回调使用,事件名aiteguigu写对才行

(2)ref

app:

<myStudent ref="myStudent"/>
mounted(){this.$refs.myStudent.$on('atguigu',this.getStudentName)//当atguigu事件触发的时候我要进行回调get、、//第一个参数是事件名,第二个参数是事件触发后的回调函数。}

这种麻烦但是灵活性更强,可以用setTimeout

3.解绑

给谁绑定的就找谁去解绑

(1)解绑一个自定义事件

<button @click="unbind">点我解绑</button>
unbind(){this.$off('atguigu')}

(2)解绑多个自定义事件

this.$off(['atguigu','demo'])

以数组形式写多个事件的事件名

(3)解绑所有自定义事件

this.$off()

4.销毁

<button @click="death">点我销毁组件</button>
death(){this.$destroy()//销毁当前student的实例,销毁后所有自定义事件都不奏效}

5.一些注意点

1-我们想在app中插入学生姓名

(注意插值语法只能是computed、props、data),props肯定不行,是从儿子传过来的,computed得是由原数据计算而来的,所以这个也不行,放data

(1)v-on的情况下直接让插值语法里面的name=传过来的name

        data(){return{studentName:''}},methods: {getStudentName(name){console.log(name)this.studentName=name},

(2)ref情况下

忽略箭头函数,如果我们把getStudentName写在methods里可以实现

但是把getStudentName用普通函数的方式写在mounted里的话就不可以实现,因为vue规定ref里的this是触发事件的对象也就是student,我们写在methods里,methods规定this就是vue

写成箭头函数的话也能实现,this也是vue

2-给组件设置原生dom事件

默认给组件设置的事件是自定义事件,加.native

@click.native="m2"

总结:

1、一种组件间通信的方式,适用于:子组件 ===> 父组件
2、使用场景:A是父组件,B是子组件,B想给A传数据,那么就要在A中给B的标签绑定自定义事件(事件的回调在A中,用来接收数据)。
3、绑定自定义事件:
(1) 第一种方式,在父组件中:

<Demo @atguigu="test"/>或 <Demo v-on:atguigu="test"/>


(2)第二种方式,在父组件中:

<Demo ref="demo"/>
mounted(){ this.$refs.xxx.$on('atguigu',this.test) }


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

4、触发自定义事件:this.$emit('atguigu',数据)给谁绑的就找谁触发
5、解绑自定义事件this.$off('atguigu')
6、组件上也可以绑定原生DOM事件,需要使用native修饰符。
7、注意:通过this.$refs.xxx.$on('atguigu',回调)绑定自定义事件时,回调要么配置在methods中,要么用箭头函数,否则this指向会出问题!

三、TodoList自定义事件

中间是爷爷和孙子先不改,改header、footer

注意只能去修改父给子传函数的地方,不能改传数据数组的todos

app里涉及到的地方全加@

<myFooter :todos="todos" @checkAllTodo="checkAllTodo" @clearAllTodo="clearAllTodo"/>
methods:{checkAll(e){this.$emit('checkAllTodo',e.target.checked)//还是得动app里的数据,得this.checkAllTodo,methods又没有},clearAll(){this.$emit('clearAllTodo')}}

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

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

相关文章

基于netcore的乡镇土地竞拍系统前端vue+mysql数据库

基于netcore的乡镇土地竞拍系统前端vuemysql数据库 本系统将采用采用Visual Studio2019版本为该系统的开发工具&#xff0c;Net 语言进行开发。系统从选题开始&#xff0c;共经历了搜集选题背景信息和选题目的及意义的分析&#xff0c;通过对国内外的研究&#xff0c;需求分析的…

mac vscode 命令行启动命令安装 别名设置方法

vscode 给我们提供了一个从命令行启动并打开vscode编辑器的shell脚本&#xff0c; 如 在vscode中打开当前文件夹&#xff0c;可以执行 code . 即可。 code命令安装方法&#xff1a; 打开vscode 使用 ctrl shift p 快捷键打开命令行窗口&#xff0c; 然后输入 shell comman…

边缘计算【智能+安全检测】系列教程-- Jeton Agx Orin 基础环境搭建

1 .前期准备 Jetson Agx Orin 比Jetson Agx Orin Xavier的算力要高&#xff0c;性能要好通常用来做自动驾驶的AI推理&#xff0c;具体外观如下图 1.刷机软件sdkmanager&#xff1a;下载链接 NVIDIA账号需要注册&#xff0c;正常一步一步往下走就行。在ubuntu18以上的系统安…

基于spring boot的个人博客系统的设计与实现(带源码)

随着国内市场经济这几十年来的蓬勃发展&#xff0c;突然遇到了从国外传入国内的互联网技术&#xff0c;互联网产业从开始的群众不信任&#xff0c;到现在的离不开&#xff0c;中间经历了很多挫折。本次开发的个人博客系统&#xff0c;有管理员&#xff0c;用户&#xff0c;博主…

数据结构:插入排序,希尔排序(缩小增量排序)

1.直接插入排序 当插入第 i 个元素时,前面的数据已经排好序了,将后续的数据按大小插入到前面已经排好序的数组中,就是插入排序 特点 1.元素集合越接近有序,时间效率越高 2.时间复杂度O(N^2) 3.空间复杂度O(1) //插入排序 void InsertSort(int* a, int length) {for (int …

ubuntu18安装opensips3.4,开启ws/wss/http接口模块

、如果是centos 7安装则使用yum 命令。 添加库地址注意系统类型&#xff0c;选择对应的系统类型和版本 curl https://apt.opensips.org/opensips-org.gpg -o /usr/share/keyrings/opensips-org.gpg echo "deb [signed-by/usr/share/keyrings/opensips-org.gpg] https:/…

机器学习——AdaBoost算法

机器学习——AdaBoost算法 在机器学习领域&#xff0c;AdaBoost算法是一种非常流行的集成学习方法&#xff0c;旨在提高分类器的性能。本篇博客将介绍AdaBoost算法的原理、算法流程、算法参数&#xff0c;对比AdaBoost和随机森林的区别&#xff0c;并使用Python实现AdaBoost算…

微服务(基础篇-003-Nacos)

目录 Nacos注册中心&#xff08;1&#xff09; 认识和安装Nacos&#xff08;1.1&#xff09; Nacos快速入门&#xff08;1.2&#xff09; 服务注册到Nacos(1.2.1) Nacos服务分级存储模型&#xff08;1.3&#xff09; 配置集群&#xff08;1.3.1&#xff09; 根据集群修改…

【新版】系统架构设计师 - 新版架构备考索引<附2023年11月原题回忆>

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 新版架构备考索引机考详情备考索引与方向&#xff08;个人观点&#xff0c;仅供参考&#xff09;总结附&#xff1a;2023年11月改版机试原题简单回忆 架构 - 新版架构备考索引 首先&#xff0c;此…

AI:152- 利用深度学习进行手势识别与控制

本文收录于专栏:精通AI实战千例专栏合集 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 每一个案例都附带关键代码,详细讲解供大家学习,希望可以帮到大家。正在不断更新中~ 一. 利用深度学习进行手势识别与控制 …

javaSSM公司招聘管理系统IDEA开发mysql数据库web结构计算机java编程maven项目

一、源码特点 IDEA开发SSM公司招聘管理系统是一套完善的完整企业内部系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;MAVEN方式加 载&#xff0c;系统具有完整的源代码和…

【Linux】Linux工具学习之git

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 前言一、账号注册1.1 GitHub与Gitee 二、构建仓库三、安装git 四、配置git五、克…