vue (8)

news2025/1/11 0:11:41

vue8

文章目录

  • 1. 浏览器本地存储
    • 1.1 localStorage
    • 1.2 sessionStorage
    • 1.3 总结
  • 2. 修改 TodoList 案例
  • 3. 绑定自定义事件
    • 3.1 绑定
    • 3.2 解绑
    • 3.3 两个注意点
    • 3.4 总结
    • 3.5 修改 TodoList 案例
  • 4. 全局事件总线
    • 4.1 总结
    • 4.2 修改 TodoList 案例

1. 浏览器本地存储

1.1 localStorage


图一 :

在这里插入图片描述


图二 : 往浏览器添加一个数据

在这里插入图片描述


图三 : 从浏览器存储中读取一个数据

在这里插入图片描述


图四 : 删除一个浏览器存储的数据

在这里插入图片描述


下面来看一个小细节 : 当我们通过 getItem方法 读取一个 没有被浏览器存储的数据时,会返回一个 null

在这里插入图片描述


附上代码 :

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>localStorage</title>
</head>

<body>

    <h2>localStorage</h2>
    <button onclick="saveData()">点我保存一个数据</button>
    <button onclick="readData()">点我读取一个数据</button>
    <button onclick="deleteData()">点我删除一个数据</button>
    <button onclick="deleteAllData()">清空</button>


    <script type="text/javascript">

        let person = {
            name: "张三",
            age: 18
        }

        function saveData() {

            window.localStorage.setItem("msg", "hello!")
            window.localStorage.setItem("person", JSON.stringify(person))
        }

        function readData() {
            console.log(window.localStorage.getItem("msg"))
            // 这里 window 可以省略,直接写成 localStorage
            let result = localStorage.getItem("person");
            console.log(JSON.parse(result));

        }

        function deleteData(){
            localStorage.removeItem("msg")

        }

        function deleteAllData(){
            localStorage.clear();
        }


    </script>
</body>

</html>


到此关于 localStorage 的几个 API 就看完了, 下面来看看 另外一个 sessionStorage


sessionStorage 中 添加一个数据到浏览器中 , 读取一个数据 等 都与 localStorage 里面是一样的 (里面的方法是一样的).

1.2 sessionStorage


这里直接 将 上面 调用 localStorage 里的方法 ,改为调用 sessionStorage 方法即可.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>sessionStorage</title>
</head>

<body>

    <h2>sessionStorage</h2>
    <button onclick="saveData()">点我保存一个数据</button>
    <button onclick="readData()">点我读取一个数据</button>
    <button onclick="deleteData()">点我删除一个数据</button>
    <button onclick="deleteAllData()">清空</button>


    <script type="text/javascript">

        let person = {
            name: "张三",
            age: 18
        }

        function saveData() {

            window.sessionStorage.setItem("msg", "hello!")
            window.sessionStorage.setItem("person", JSON.stringify(person))
        }

        function readData() {
            console.log(window.sessionStorage.getItem("msg"))
            // 这里 window 可以省略,直接写成 sessionStorage
            let result = sessionStorage.getItem("person");
            console.log(JSON.parse(result));

        }

        function deleteData(){
            sessionStorage.removeItem("msg")

        }

        function deleteAllData(){
            sessionStorage.clear();
        }


    </script>
</body>

</html>


图示 :

在这里插入图片描述

关于 使用 sessionStorage 保存数据 会在关闭浏览器后自动清空.

1.3 总结

关于 localStorage 和 sessionStorage 统称未 webStorage.

关于 webStorage 有 :

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

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

  3. 相关 API :

    a. xxxxStorage.setItem('key','value'); 该方法接收一个键和一个值作为参数 , 会把键值对添加到存储中 , 如果键名存在,则更新对应的值 (新的value 值 将 旧的 value 值覆盖掉)
    
    b.xxxxStorage.getItem('pserson') 该方法接受一个键名作为参数 , 返回键名对应的值
    
    c. xxxxStorage.removeItem('key') 该方法接接受一个键名作为参数 , 并把该键名从存储中删除
    
    d. xxxxStorage.clear() 该方法会清空存储中所有数据
    
  4. 备注 :

    a. SessionStorage 存储的内容会随着浏览器窗口关闭而消失
    
    b. LocalStorage 存储的内容,需要手动清空才会消失
    
    c. xxxxStorage.getItem(xxx) 如果 xxx 对应的 value 值获取不到 , 那么 getItem 的返回值 是 null
    
    d. JSON.parse(null) 的结果依然是 null.
    

2. 修改 TodoList 案例


上面我们学习了 浏览器本地存储 ,下面我们就来修改一下之前完成的 TodoList 案例 .


之前我们的 TodoList 案例 并没有存储功能 ,下面将 用户 输入的任务存储到 浏览器中 (这里最好的做法是存入到数据库中.)


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


图三 :

在这里插入图片描述

TodoList 案例 完整代码

3. 绑定自定义事件


在学习 绑定自定义事件 前我们先来准备一下学习的环境 ,

在这里插入图片描述


创建两个 组件 School 和 Student 组件 .


School组件 :

<template>
  <div class="school">
    <h2>学校名称: {{ name }}</h2>
  </div>
</template>

<script>
export default {
  name: "School",
  data() {
    return {
      name: "小葵花幼儿园",
      address: "翻斗花园",
    };
  },
};
</script>

<style scoped>
.school {
  background-color: skyblue;
  padding: 5px;
}
</style>


Student 组件 :

<template>
  <div class="student">
    <h2>学生姓名 : {{ name }}</h2>
    <h2>学生性别 : {{ sex }}</h2>
  </div>
</template>

<script>
export default {
  name: "Student",
  data() {
    return {
      name: "张三",
      sex: "男",
    };
  },
};
</script>

<style scoped>
.student {
  background-color: pink;
  padding: 5px;
  margin-top: 30px;
}
</style>


App 组件 :

<template>
  <div class="app">
    <h1>{{ msg }}</h1>
    <School :getSchoolName="getSchoolName" />
    <Student />
  </div>
</template>

<script>
import Student from "./components/Student.vue";
import School from "./components/School.vue";

export default {
  name: "App",
  components: {
    School,
    Student,
  },
  data() {
    return {
      msg: "快快乐乐学习Vue",
    };
  },
  methods: {
    getSchoolName(name) {
      console.log("App 收到了学校名 : " + name);
    },
  },
};
</script>

<style>
.app {
  background-color: gray;
  padding: 5px;
}
</style>


完成上面环境搭建 ,会得到以下的页面效果 :

在这里插入图片描述


下面就来 学习给组件绑定自定义事件 :

3.1 绑定


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


图三 :

在这里插入图片描述


图四 :

在这里插入图片描述


到此我们已经学习完了 绑定自定义事件 ,下面我们来学习一下给绑定了自定义事件的组件进行解绑操作.

3.2 解绑


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


图三 :

在这里插入图片描述


图四 :

在这里插入图片描述

3.3 两个注意点


注意点一 :


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


图三 :

在这里插入图片描述


注意点二 :


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述

到此两个注意点看完 , 下面就来总结一波

3.4 总结


组件的自定义事件

  1. 一种组件间通信的方式 使用 : 子组件 ===> 父组件

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

  3. 绑定自定义事件 :

    a. 第一种方式 , 在父组件中 : <Demo @wahh = "test" /><Demo v-on:wahh = "test" />

    b. 第二种方式 , 在父组件中

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

    c. 若想让自定义事件只能触发一次 , 可以使用 once 修饰符 ,或 $once 方法 (这个是在 ref 方式中使用).

  4. 触发自定义事件 : this.$emit('wahh',传递的数据)

  5. 解绑自定义事件 : this.$off('wahh')

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

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

3.5 修改 TodoList 案例


上面我们已经学习了 自定义事件, 下面来练习一下 ,把之前我们写的 TodoList 案例 用上自定义事件来传递数据.


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


图三 :

在这里插入图片描述

TodoList 自定义事件完整代码

4. 全局事件总线


全局事件总线 可以实现 任意组件间通信


这里我们先来看看原理图 :


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


原理图看完,下面通过代码来学习一下事件总线.


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


图三 :

在这里插入图片描述


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


图五 :

在这里插入图片描述


图六 :

在这里插入图片描述

注意 : 绑定的事件别忘记 解绑

在这里插入图片描述

4.1 总结


全局事件总线 (GlobalEventBus)

  1. 一种组件间通信的方式 , 使用于 任何组件间通信

  2. 安装全局事件总线 :

    new Vue({
    	.....
    	beforeCreate(){
    	// 安装全局事件总线 , $bus 就是当前应用的 vm
    		Vue.prototype.$bus = this
    	}
    })
    
  3. 使用事件总线 :

    a.接收数据 : A 组件想要接收数据 , 则在 A 组件中 给 $bus 绑定自定义事件 , 事件的 回调留在 A 组件自身

    methods(){
    	demo(data){.....}
    }
    .....
    mounted(){
    	this.$bus.$on('xxxx',this.demo)
    }
    

    b. 提供数据 : this.$bus.$emit('xxxx',数据)

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

4.2 修改 TodoList 案例


上面我们已经了解完 全局事件总线,下面通过 事件总线来 修改一下我们的 TodoList 代码案例.


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述

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

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

相关文章

【MySQL数据库】项目中用到的一些SQL查询总结

文章目录 前言1. 有A&#xff0c;B两张表&#xff0c;需要统计A表中某个属性值的总数&#xff0c;更新到B表中实现代码 2. 将三张&#xff08;或n张&#xff09;表中的结果合并一起实现代码 3. 删除题库中的所有试题信息实现代码 4. 统计同一张表中&#xff0c;不同属性的数量于…

C语言-typedef关键字

一.typedef 关键字 typedef是在C语言允许为一个数据类型起一个新的别名。它本身是一种存储类的关键字,与auto extern,mutable、static、register 等关键字不能出现在同一个表达式中。 二、typedef用法 示例&#xff1a; 对于数据类型使用例如&#xff1a; 对于指针的使用例如…

【VictoriaMetrics】VictoriaMetrics单机版批量和单条数据写入(influx格式)

VictoriaMetrics单机版支持以influx格式的数据写入,写入支持单条数据写入以及多条数据写入,下面操作演示下如何使用 1、首先需要启动VictoriaMetrics单机版服务 启动VictoriaMetrics单机版服务执行的命令如下 nohup /opt/victoriaMetrics/victoria-metrics-prod -httpListe…

【剑指offer专项突破版】整数篇(经典面试题)——C

文章目录 前言一. 整数除法题目分析1.一般思路①代码 2.优化思路②优化后的代码 拓展:用位运算实现整数的加法③代码 二. 二进制加法题目分析思路分析①代码 三. 前n个数字中1的个数题目描述思路分析①方法1——遍历②方法2——i&(i-1)③方法3——i&(i-1)的优化④方法…

数字赋农:数字农业新时代,致富之路宽又阔!

不管在什么年代&#xff0c;粮食永远是国之根本、民之命脉&#xff0c;而来粮食安全更是“国之大者”&#xff0c;更是曾在大会中明确提出过&#xff0c;要全方位夯实粮食安全根基&#xff0c;牢牢守住十八亿耕地红线&#xff0c;确保中国人的饭碗牢牢端在自己手中。 我们需要深…

快速入门SpringMVC 学习

目录 SpringMVC 定义 MVC定义 创建SpringMVC项目 SpringMVC掌握功能 一、连接功能 RequestMapping(请求映射) GetMapping 和 PostMapping 二、获取参数功能 传递单个参数/多个参数 注意点&#xff1a; RequestParam(前后端参数映射) 前后端参数映射 RequestParam特…

骆驼祥子思维导图怎么画?高效工具分享

骆驼祥子是一部中国现代文学经典作品&#xff0c;由老舍所著。在阅读这本书时&#xff0c;我们可以使用思维导图来梳理故事情节和人物关系&#xff0c;从而更好地理解这本书的主题和内涵。 我们可以在线制作思维导图&#xff0c;这个网站还内置了流程图和Markdown功能。 站点内…

前瞻洞察|Prompt Learning(提示学习)——新的低资源场景克星

近年来&#xff0c;预训练语言模型已然成为自然语言处理&#xff08;NLP&#xff09;领域中备受瞩目的技术之一。预训练模型可以在大规模文本语料上进行自监督学习&#xff0c;从而获得丰富的语言学知识&#xff0c;并通过在下游任务上进行微调&#xff0c;实现出色的性能。Pro…

markdown导出成html,并将图片转换成base64

文章目录 方案一&#xff0c;使用typora第一步&#xff0c;编写python脚本第二步&#xff0c;设置导出后运行py脚本&#xff0c;设置如下 方式二&#xff0c;使用vscode插件&#xff1a;Markdown Preview Enhanced使用方法在markdown头部添加 预览界面右键&#xff0c;选择导出…

JAVA基础知识总结系列(2):JAVA语法基础

1&#xff0c;关键字&#xff1a;其实就是某种语言赋予了特殊含义的单词。 保留字&#xff1a;其实就是还没有赋予特殊含义&#xff0c;但是准备日后要使用过的单词。 2&#xff0c;标示符&#xff1a;Java中的包、类、方法、参数和变量的名字&#xff0c;可由任意顺序的大小写…

用低代码打造高效餐厅管理系统

当代社会&#xff0c;餐饮业有着非常广阔的市场前景&#xff0c;也承担着相应的管理力。随着人工智能、物联网等新技术的快速发展&#xff0c;低代码能化为了许多餐饮门店管理的新革命。在这篇文章中&#xff0c;我们将会探讨低代码智能化带来的餐门店管理新使命。 一、低代码…

leetcode 2101. Detonate the Maximum Bombs(引发最多的bomb)

bombs是一个二维数组&#xff0c;每个bombs[i] [x, y, r] 代表一个bomb&#xff0c;(x,y)是二维坐标&#xff0c;r是半径。 点燃一个bomb时&#xff0c;以(x,y)为圆心&#xff0c;半径为r的圆范围内的bomb都会点燃&#xff0c;引起连锁反映。 选择一个bomb点燃&#xff0c;使得…

品牌出海3大营销新趋势

过去一年&#xff0c;跨境行业复杂多变&#xff0c;在成本剧增、利润承压之下&#xff0c;出海卖家们面临着诸多考验&#xff0c;但不管如何&#xff0c;可以肯定的是&#xff0c;未来跨境电商行业势必将迎来一波新增长。反之&#xff0c;随着行业竞争加剧&#xff0c;对卖家的…

MongoDB 复制集的基本概念

官方概念&#xff1a;副本集是一组 MongoDB 的进程去维持同样的一份数据集&#xff0c;通过 MongoDB 的复制协议保证主备之间的数据一致性。 如上图所示&#xff0c;MongoDB 有两种部署方式&#xff0c;一个是 Standalone 部署模式&#xff1b;另外一个是副本集&#xff0c;有不…

AppScan入门(二) — Web漏洞扫描工具AppScan的使用

Web漏洞扫描工具AppScan的安装(win10系统亲测ok)&#xff0c;安装完后&#xff0c;进行实操&#xff0c;常用的基本操作&#xff0c;防止自己后期使用忘记&#xff0c;也给用到的朋友一个参考 1、打开AppScan,新建一个项目 &#xff08;文件—>新建—>扫描web应用程序&…

OpenWrt 软路由解析公网IPV6域名访问家庭NAS的教程

OpenWrt软路由放行IPV6公网访问家庭NAS黑群晖设备的教程&#xff0c;威联通/黑群晖设置阿里云动态解析进行外网 IPV6 域名访问家中 NAS&#xff0c;设置OpenWrt软路由&#xff0c;通过ipv6外网访问家中电脑nas等设备系列教程&#xff0c;学长今天啥也没有干&#xff0c;网站也没…

android使用fat-aar打包,本地aar和第三方依赖库以及遇到的问题

android使用fat-aar打包&#xff0c;本地aar和第三方依赖库以及遇到的问题 为什么会用到fat-aar如何使用打出来的aarlib中存在多个架构&#xff0c;例如x86\x86_64我在打包okhttp和retrofit的时候遇到的问题 你遇到其他问题怎么处理&#xff1f; 为什么会用到fat-aar 需要把有…

工业级高性能3D模型渲染引擎,专注于3D Web轻量化!

一、技术概览 HOOPS Communicator 是一个SDK&#xff0c;用于在Web浏览器中开发3D工程应用程序&#xff0c;重点在于&#xff1a; 完全访问工程数据使用方便快速发展高性能可视化快速模型流灵活使用和部署 点击此处获取>>>3D模型轻量化及格式转换解决方案 它的主要…

提高国外 VPS 云主机性能(Linux系统)的 4 个步骤

​  随着外贸业务的兴起及不断发展&#xff0c;越来越多的企业和个人开始使用国外 VPS 云主机来部署自己的应用程序和网站。其中&#xff0c; Linux 系统的国外VPS 云主机创造了众多的可能性和功能&#xff0c;但仍有一些方法可以进一步提高 Linux VPS 的整体性能。下面我们将…

YOLOv5 白皮书-第Y5周:yolo.py文件解读

目录 一、前言二、导入需要的包和基本配置三、 parse_model函数四、Detect类五、BaseModel类六、调整模型1. common.py中生成C22. yolo.py的parse_model中增加c23. yolov5s.yaml中增加c2 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客 &#x1f366;…