Vue 如何监听 localstorage的变化

2023-09-22 15:37:35

一. 说明


在日常开发中,我们经常使用localStorage来存储一些变量。这些变量会存储在浏览中。对于localStorage来说,即使关闭浏览器,这些变量依然存储着,方便我们开发的时候在别的地方使用。

二. localStorage的使用


存储值:window.localStorage.setItem(‘键名’, 值)
读取值:window.localStorage.getItem('‘键名’)


三. 监听localStorage值的变化

  1. 在utils中新建一个文件watchLocalStorage.ts
export default function dispatchEventStroage() {
	const signSetItem = localStorage.setItem
	localStorage.setItem = function (key, val) {
		let setEvent = new Event('setItemEvent')
		setEvent.key = key
		setEvent.newValue = val
		window.dispatchEvent(setEvent)
		// eslint-disable-next-line prefer-rest-params
		signSetItem.apply(this, arguments)
	}
}

2. 在main.js中引入并挂载

import dispatchEventStroage from './utils/watchLocalStorage'
Vue.use(dispatchEventStroage);

3.在需要监听的地方使用如下代码

mounted () {
      // 监听localhostStorage的数据变化,结合utils/tool.js配合使用
      const that=this 
      window.addEventListener('setItemEvent', function (e) {
        if (e.key === 'myKey') {   // myKey是需要监听的键名
          that.mykey = e.newValue;
          console.log(JSON.parse(e.newValue))   // 这里的newValue就是localStorage中,键名为myKey对应的变化后的值。
          console.log('本地存储值发生变化:', e.newValue)
        }
      })
    },

 特别注意:
我刚开始做的时候,考虑不周,没有写const that=this 这一句,我用的如下代码,一直报错,赋值不了,如下代码是错误的,
为什么要用const that=this这一个呢?
那是因为在JavaScript中,this代表的是当前对象,他是会随程序运行不停改变的,
如果用this的话,this是addEventListener监听中当前的对象,所以赋值的时候不能赋值到外面去。
const that = this 其实就是在this改变之前先复制一份给that,那么在程序后面的运行中就可以用that来赋值该函数以外的对象了,比如that.order

四.另外提供一种方法 vuex

利用 const that=this,可以将值存进store中,

this.od2Visible = true;
    this.title = '舰船航线规划';
    this.$store.commit("tools/setzhk", 'od5');
    var tempList = [];
    const that = this;
    var handler = new Cesium.ScreenSpaceEventHandler(window.viewer.scene.canvas); // 创建鼠标事件handler
    handler.setInputAction(function(click) { // 监听鼠标左键点击事件
        // 获取点击位置的地球坐标
        var cartesian = window.viewer.camera.pickEllipsoid(click.position, window.viewer.scene.globe.ellipsoid);
        // 转换为笛卡尔坐标系 
        let cartographic1 = Cesium.Cartographic.fromCartesian(cartesian);
        // 转换为经纬度
        var latitude = Cesium.Math.toDegrees(cartographic1.latitude);
        var longitude = Cesium.Math.toDegrees(cartographic1.longitude);
        tempList.push(longitude,latitude)
          if (cartesian) {
              var entity = window.viewer.entities.add({ // 在该位置添加点
                  position: cartesian,
                  point: {
                      pixelSize: 10,
                      color: Cesium.Color.YELLOW
                  }
              });
              
          }
          localStorage.setItem('lonlan',tempList)
          that.$store.commit("tools/setlonlat", tempList);
          console.log(1001,that)

      }, Cesium.ScreenSpaceEventType.LEFT_CLICK);

然后再使用 用 计算属性 computed 和 watch 监听实现

computed: {
    lonlat(){
      return this.$store.state.tools.lonlat
    }
  },
  watch: {
    lonlat(newVal,oldVal){
      console.log(1002,newVal,oldVal)
    }
  },

更多推荐

amlogic 机顶盒关闭DLNA 后,手机还能搜到盒子

S905L3带有投屏的功能,并通过com.droidlogic.mediacenter.dlna.MediaCenterService服务的启动和停止来开启和关闭DLNA功能,但是在测试中发现机顶盒关闭DLNA后,手机还能搜索到盒子。我在复测中发现关闭后有时很难很久搜索到盒子,有时却很容易搜索到。通过查看日志,发现打开

C语言每日一题(10):无人生还

文章主题:无人生还🔥所属专栏:C语言每日一题📗作者简介:每天不定时更新C语言的小白一枚,记录分享自己每天的所思所想😄🎶个人主页:[₽]的个人主页🏄🌊目录前言编程起因项目介绍情节简介讨论内容找出凶手设计思路1.整体逻辑方法一方法二2.具体逻辑方法一方法二代码展示方法一:依次假设法(最容易想到的方法)方法二:逻

【ABAP】如何理解SAP中的CLIENT (客户端)

💂作者简介:THUNDER王,阿里云社区专家博主,华为云·云享专家,腾讯云社区认证作者,CSDNSAP应用技术领域优质创作者。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAPABAP开发和数据库具有较深入的研究。💅文章概要:MANDT集团永远是无数SAP入门人员无

【STM32】SDIO—SD 卡读写01

基于stm32f103基于零死角玩转STM32—F103指南者简介1.SD卡总共有8个寄存器,用于设定或表示SD卡信息。2.SD卡的寄存器不能像STM32那样访问,而是利用命令访问,SDIO定义了64个命令。SD卡接收到命令后,根据命令要求对SD卡内部寄存器进行修改,程序控制中只需要发送组合命令就可以实现SD卡的控制以

认识微服务、服务拆分和远程调用

文章目录1.认识微服务2.微服务架构的特征3.SpringCloud4.服务拆分5.远程调用6.提供者与消费者1.认识微服务单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务架构优点缺点单体架构架构简单,部署成本低,耦合度高

C与C++字符串方法示例

C和C++中的字符串处理方法有所不同。在C语言中,字符串被表示为字符数组,使用字符数组来处理字符串。C语言提供了许多用于处理字符串的库函数,如strcpy,strcat,strcmp等。这些函数可以用于复制,连接和比较字符串等操作。在C++中,字符串被表示为字符串对象,使用字符串对象来处理字符串。C++中的字符串类提供

hadoop HDFS分布式计算概述,MapReduce概述,YARN概述

1、分布式计算概述1.1、什么是(数据)计算我们一直在提及:分布式计算,分布式暂且不论,“计算”到底是指什么呢?大数据体系内的计算,举例:销售额统计、区域销售占比、季度销售占比利润率走势、客单价走势、成本走势品类分析、消费者分析、店铺分析等等一系列,基于数据得出的结论。这些就是我们所说的计算。1.2、分布式(数据)计算

Spire.OCR for .NET 1.9.0 Crack

Spire.OCRfor.NET是一个专业的OCR库,用于从JPG、PNG、GIF、BMP和TIFF格式的图像中读取文本。开发人员可以轻松地在C#和VB.NET的.NET应用程序中添加OCR功能。它支持常用的图像格式,并提供从图像中​​读取多个字符和字体、粗体和斜体样式、扫描整个图像等功能。Spire.OCRfor.N

轮转数组:解决数组元素向右轮转的高效算法

轮转数组:解决数组元素向右轮转的高效算法leetcode189.轮转数组在计算机编程中,经常会遇到数组操作的问题,其中之一就是将数组中的元素向右轮转k个位置。这篇技术博客将详细介绍这个问题,探讨解决方案,并提供实际的Python代码来解决这个问题。问题描述给定一个整数数组nums,需要将数组中的元素向右轮转k个位置,其

【Java 基础篇】Java Lambda表达式详解

Lambda表达式是Java编程语言中引入的一个强大的特性,它使得编写更加简洁、可读性更强的代码变得更容易。本文将详细介绍Lambda表达式的概念、语法、用法以及示例,以帮助基础的Java开发者理解和应用Lambda表达式。什么是Lambda表达式Lambda表达式,也称为闭包,是一种匿名函数,它可以传递到方法作为参数

固态继电器的用途概述

固态继电器已成为现代电子电气系统中不可或缺的组件。这些设备以其可靠性和多功能性而闻名,这使得它们在广泛的应用中至关重要。在本文中,我们将探讨固态继电器的功能和应用。固态继电器:简介固态继电器(也称为SSR,固态式开关,或固态开关)是一种集成的无触点式的电子开关设备,由集成电路(C)和分立元件封装到一个紧凑的固态结构中。

热文推荐