Vue2 —— 学习(八)

目录

一、浏览器 webStorage

(一)介绍

(二)LocalStorage

1.存储数据 

2.查询/读取数据  

3.移除数据  

4.清空数据  

(三)SessionStorage 

二、TodoList 案例使用 storage

三、组件的自定义事件

(一)自定义事件 v-on 写法

(二)ref 写法

(四)解绑自定义事件

1.正常解绑

2.销毁实例

(五)总结


一、浏览器 webStorage

(一)介绍

就是比如我们在购物网站 搜索了某个商品信息,然后退出网页再进入购物网站,会发现搜索栏下面有搜索历史,这个记录就存在我们浏览器的本地存储。

进入开发者模式 然后点击 应用栏 就是 application

Storage 下面有两个存储 一个是  localstorage 本地存储 里面就是我们存东西的网站,就是我们访问网站的域名

值是 key value 的形式

(二)LocalStorage

特点:浏览器关闭数据也不会消失 清除缓存数据会消失,或者手动删除

向浏览器中添加数据 使用 Window 上的方法 localStorage.setItem 设置,里面必须都是字符串

如果给的不是字符串形式 它会默认给我们改成字符串形式

<body><h2>localStorage</h2><button onclick="saveData()">点我保存一个数据</button><script>function saveData() {localStorage.setItem('msg', 'hello')}</script>
</body>
1.存储数据 

 要存储对象型的数据 我们用 JSON.stringify 把对象转化成字符串即可

    localStorage.setItem('person', JSON.stringify(p))
2.查询/读取数据  

查询浏览器中数据 使用 Window 上的方法 localStorage.getItem 设即可

如果是对象 再 JSON.parse(得到的字符串) 就能得到原来形式的数据

如果没有该数据 读出的数据是 null

  function readData() {console.log(localStorage.getItem('msg')) }
3.移除数据  

移除浏览器中数据 使用 Window 上的方法 localStorage.removeItem 设即可 

  function deleteData() {localStorage.removeItem('msg') }
4.清空数据  

清空浏览器中数据 使用 Window 上的方法 localStorage.clear() 即可  

  function deleteAllData() {localStorage.clear()}

(三)SessionStorage 

特点:关闭浏览器时数据清空

api 与上面 localstorage 一致 把名字替换成 sessionStorage 就行

二、TodoList 案例使用 storage

app 更新

<template><div id="root"><div class="todo-container"><div class="todo-wrap"><MyHeader :addTodo="addTodo" /><MyList:todos="todos":checkTodo="checkTodo":deleteTodo="deleteTodo"/><MyFooter:todos="todos":checkAllTodo="checkAllTodo":clearAllTodo="clearAllTodo"/></div></div></div>
</template>
<script>
import MyHeader from "./components/MyHeader.vue";
import MyFooter from "./components/MyFooter.vue";
import MyList from "./components/MyList.vue";
export default {name: "app",components: {MyHeader,MyFooter,MyList,},data() {return {todos: JSON.parse(localStorage.getItem("todos")) || [],};},methods: {addTodo(todoObj) {this.todos.unshift(todoObj);},checkTodo(id) {this.todos.forEach((todo) => {if (todo.id === id) todo.done = !todo.done;});},deleteTodo(id) {this.todos = this.todos.filter((todo) => {return todo.id !== id;});},checkAllTodo(done) {this.todos.forEach((todo) => {todo.done = done;});},clearAllTodo() {this.todos = this.todos.filter((todo) => {return !todo.done;});},},watch: {todos: {deep: true,handler(value) {localStorage.setItem("todos", JSON.stringify(value));},},},
};
</script><style>
/*base*/
body {background: #fff;
}.btn {display: inline-block;padding: 4px 12px;margin-bottom: 0;font-size: 14px;line-height: 20px;text-align: center;vertical-align: middle;cursor: pointer;box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);border-radius: 4px;
}.btn-danger {color: #fff;background-color: #da4f49;border: 1px solid #bd362f;
}.btn-danger:hover {color: #fff;background-color: #bd362f;
}.btn:focus {outline: none;
}.todo-container {width: 600px;margin: 0 auto;
}
.todo-container .todo-wrap {padding: 10px;border: 1px solid #ddd;border-radius: 5px;
}
</style>

三、组件的自定义事件

是组件间的一种通信方式 适用于 子组件到父组件

原本写法

原本的子组件给父亲组件传东西

就是父亲先传一个函数给儿子 然后儿子调用 父亲就能得到儿子中的参数

(一)自定义事件 v-on 写法

v-on 可以简写成 @

通过绑定一个自定义事件来实现子给父传递数据 名字叫做 hahaha

 <MyStudent v-on:hahaha="getStudentName" />

在 app 编写调用的函数 

  getStudentName(name){console.log('demo被调用了',name)}

在 Student 中写 hahaha 事件,并返回 this.name 

就不用props 接收了 方便一点

this.$emit('hahaha',this.name) 传数据的语法

 methods: {sendStudentName(){this.$emit('hahaha',this.name)}},

仅触发一次

 

 <MyStudent v-on:hahaha.once="getStudentName" />

(二)ref 写法

使用 ref 属性 更好一点 如果涉及到延时 触发的时候 我们可以用 ref

    <MyStudent ref="student" />

设置延时三秒才有 hahaha 事件 

 mounted() {setTimeout(() => {this.$refs.student.$on("hahaha", this.getStudentName);}, 3000);},

只触发一次

      this.$refs.student.$once("hahaha", this.getStudentName);

(四)解绑自定义事件

1.正常解绑

在谁里面定义的事件 就在谁里面解绑 

我们在 MyStudent 里面写一个 解绑函数

解绑一个事件

 unbind(){this.$off('hahaha')}

解绑多个事件 我们用 一个数组把我们要解绑的 事件名 放进去

 unbind(){this.$off(['hahaha','demo'])}

解绑所有事件

 unbind(){this.$off()}
2.销毁实例

如果销毁 vc 实例,里面的自定义事件也同时被销毁,

如果销毁 vm 实例,所有的子组件也同样被销毁,组件里的自定义事件也被销毁

(五)总结

是组件间的一种通信方式

只能子传父 

组件上能绑定原生的 dom 事件 但是得用native 修饰

      this.$refs.student.$once("hahaha", this.getStudentName);

中的回调函数如果不写在 methods 里面 还能直接写在这句话里面但是 但是必须用箭头函数否则this 指向会出问题, this 指向调用事件的实例 就是 Student 不是我们要的 this 指向 

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

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

相关文章

[lesson48]同名覆盖引发的问题

同名覆盖引发的问题 父子间的赋值兼容 子类对象可以当做父类对象使用(兼容性) 子类对象可以直接赋值给父类对象(<font color>兼容性)子类对象可以直接初始化父类对象父类指针可以直接指向子类对象父类引用可以直接引用子类对象 当使用父类指针(引用)指向子类对象时 子类…

30 消息队列

原理 操作系统可以通过页表映射在共享区创建一块共享内存&#xff0c;也可以申请一个队列。A进程和B进程可以向这个队列发送数据块&#xff0c;两个进程接收数据块来通信 函数 申请数据块 参数中的key来自于ftok函数 删除消息队列 同样消息队列也有数据结构管理&#xff…

数值分析复习:Richardson外推和Romberg算法

文章目录 Richardson外推Romberg&#xff08;龙贝格&#xff09;算法 本篇文章适合个人复习翻阅&#xff0c;不建议新手入门使用 本专栏&#xff1a;数值分析复习 的前置知识主要有&#xff1a;数学分析、高等代数、泛函分析 本节继续考虑数值积分问题 Richardson外推 命题&a…

解决在linux中执行tailscale up却不弹出验证网址【Tailscale】【Linux】

文章目录 问题解决提醒 问题 最近有远程办公需求&#xff0c;需要连接内网服务器&#xff0c;又不太想用todesk&#xff0c;于是找到一个安全免费可用的Tailscale Best VPN Service for Secure Networks&#xff0c;在windows中顺利注册账号后&#xff0c;登陆了我的windows …

上位机图像处理和嵌入式模块部署(树莓派4b进行驱动的编写)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 树莓派4b上面还支持驱动代码的编写&#xff0c;这是我没有想到的。这里驱动&#xff0c;更多的是一种框架的编写&#xff0c;不一定是编写真正的驱…

Python3中的JSON介绍

JSON的本质是一个字符串&#xff0c;有一些特定的格式。用途是每一种语言都可以实现数据传输&#xff0c;比如不同的编程语言之间的传输。 序列化&#xff1a;Python数据类型 -> JSON格式字符串 import json info {1: 2,2: 3 }string json.dumps(info) print(type(string…

20240422,C++文件操作

停电一天之后&#xff0c;今天还有什么理由不学习呜呜……还是没怎么学习 一&#xff0c;文件操作 文件操作可以将数据持久化&#xff0c;对文件操作时须包含头文件<fstream> 两种文件类型&#xff1a;文本文件&#xff1a;文件以文本的ASCII码形式存储&#xff1b;二进…

【Vue3】$subscribe订阅与反应

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

【深度学习总结_02】在自己的数据集微调SAM

【深度学习总结_02】在自己的数据集微调SAM 前言 SAM (Segment Anything Model)是Meta AI开发的一种分割模型。它被认为是计算机视觉的第一个基础模型。SAM是在包含数百万图像和数十亿mask的庞大数据语料库上进行训练的&#xff0c;这使得它非常强大。SAM能够为各种各样的图像…

代码随想录算法训练营第56天|583. 两个字符串的删除操作、72. 编辑距离

583. 两个字符串的删除操作 题目链接&#xff1a;两个字符串的删除操作 题目描述&#xff1a;给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 **相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 动态规划&#xff08;思路一&#xff09;&…

超越OpenAI,谷歌重磅发布从大模型蒸馏的编码器Gecko

引言&#xff1a;介绍文本嵌入模型的重要性和挑战 文本嵌入模型在自然语言处理&#xff08;NLP&#xff09;领域扮演着至关重要的角色。它们将文本转换为密集的向量表示&#xff0c;使得语义相似的文本在嵌入空间中彼此靠近。这些嵌入被广泛应用于各种下游任务&#xff0c;包括…

VideoComposer: Compositional Video Synthesis with Motion Controllability

decompose videos into three distinct types of conditions: textual conditions, spatial conditions, temperal conditions 条件的内容&#xff1a; a. textual condition: coarse grained visual content and motions, 使用openclip vit-H/14的text encoder b. spatial co…

Spring MVC的请求处理流程

Spring MVC的请求处理流程是一个精心设计的过程&#xff0c;旨在高效、灵活地处理Web请求并生成相应的响应。以下是该流程的详细解释&#xff1a; 用户发送请求&#xff1a; 用户通过浏览器或其他客户端发送HTTP请求到服务器。这个请求包含了请求的URL、请求方法&#xff08;如…

Splashtop 将在 NAB 展会上推出音视频剪辑增强功能

加利福尼亚州拉斯维加斯 Splashtop 在简化随处办公远程解决方案领域处于领先地位&#xff0c;在今年举行的 NAB 展会上将推出 Enterprise 解决方案的高级性能功能&#xff0c;均面向广播和媒体工作者而设计。 Splashtop Enterprise 经过优化&#xff0c;可为执行视频剪辑、唇…

Excel文件解析--超大Excel文件读写

使用POI写入 当我们想在Excel文件中写入100w条数据时&#xff0c;我们用普通的XSSFWorkbook对象写入时会发现&#xff0c;只有在将100w条数据全部加载入内存后才会用write()方法统一写入&#xff0c;这样效率很低&#xff0c;所以我们引入了SXSSFWorkbook进行超大Excel文件的读…

fixture固件和装饰器@pytest.mark.parametrize的参数化差异

fixture固件中有params参数可以进行参数化配置&#xff0c;装饰器pytest.mark.parametrize也可以为用例进行参数化配置&#xff0c;它们都是pytest框架中用于参数化测试的机制&#xff0c;但它们之间还是有很大差异的&#xff0c;该篇文章就来讲一讲这二者的区别使用&#xff1…

java开发之路——node.js安装

1. 安装node.js 最新Node.js安装详细教程及node.js配置 (1)默认的全局的安装路径和缓存路径 npm安装模块或库(可以统称为包)常用的两种命令形式&#xff1a; 本地安装(local)&#xff1a;npm install 名称全局安装(global)&#xff1a;npm install 名称 -g本地安装和全局安装…

C++中的STL——stack类的基本使用

目录 stack类介绍 stack类定义 stack类常见构造函数 stack数据操作 empty()函数 size()函数 top()函数 push()函数 pop()函数 swap()函数 stack类介绍 stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端…

【Leetcode】string类刷题

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;Leetcode刷题 目录 1.仅反转字母2.字符串中第一个唯一字符3.验证回文串4.字符串相加5.反转字符串I I6.反转字符串中的单词III7.字符串相乘8.把字符串转换为整数 1.仅反转字母 题目链接&#xff1a;…

Rust 模式匹配中的 和 ref

一、Rust & 和 ref 1.Rust的ref有什么用 根据Rust官方文档https://doc.rust-lang.org/std/keyword.ref.html Rust ref 主要用在模式匹配match的所有权问题中。 ref在 Rust中&#xff0c;也是声明一个指针类型变量&#xff0c;进一步说明ref和&在其它方面区别&#xf…