我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue中怎么实时监听本地存储

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vue中怎么实时监听本地存储

这篇文章主要介绍“vue中怎么实时监听本地存储”,在日常操作中,相信很多人在vue中怎么实时监听本地存储问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue中怎么实时监听本地存储”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

如何实时监听本地存储

在main.js中

Vue.prototype.$addStorageEvent = function (type, key, data) {  if (type === 1) {  // 创建一个StorageEvent事件  var newStorageEvent = document.createEvent('StorageEvent');  const storage = {      setItem: function (k, val) {          localStorage.setItem(k, val);          // 初始化创建的事件          newStorageEvent.initStorageEvent('setItem', false, false, k, null, val, null, null);          // 派发对象          window.dispatchEvent(newStorageEvent);      }  }  return storage.setItem(key, data);} else {  // 创建一个StorageEvent事件  var newStorageEvent = document.createEvent('StorageEvent');  const storage = {      setItem: function (k, val) {          sessionStorage.setItem(k, val);          // 初始化创建的事件          newStorageEvent.initStorageEvent('setItem', false, false, k, null, val, null, null);          // 派发对象          window.dispatchEvent(newStorageEvent);      }  }  return storage.setItem(key, data);}}

想要的时候触发

this.$addStorageEvent(2, "butCountNum", this.butCount);

在mouted钩子函数中进行监听

window.addEventListener('setItem', (e) => {      if(e.key === "butCountNum"){          //写逻辑      }

vue监听数据变化

监听数据变化,在Vue中是通过侦听器来实现的,你也可以将它理解为监听器,时刻监听某个数据的变化。

watch的基本用法

在之前我们在js中添加了data、methods,这一次我们要添加的是watch属性。下面我们先来眼熟一下侦听器的添加位置:

<script>export default {    name: "app",    // 数据    data() {        return {};    },    // 方法    methods:{},    // 侦听器    watch:{}};</script>

一个简单的例子:

<template>    <p>你点击按钮的次数是: {{ count }} </p>    <button @click="add" v-model="count">点击</button></template>
<script>export default {    name: "app",    data(){        return {            count:0        }    },    methods:{        add(){            this.count++;        }    },    watch:{        // 被侦听的变量count        count(){            console.log('count 发生了变化');        }    }};</script>

侦听器更多的是用在异步操作中,所谓异步操作就是数据返回有所延迟的操作,比如说我们要请求后端的接口,接口会返回给我们数据,然后我们再将数据渲染在页面上。

从请求接口到返回数据,这中间需要一定的时间,此时我们就可以用侦听器来侦听返回的数据,当数据返回以后,我们再触发渲染。

模拟一个伪异步操作:

<template>    <input type="text" v-model="inputValue">    <p>从输入框中获取到的数据:{{ passedInputValue }}</p></template>
<script>export default {    name: "app",    data(){        return {            inputValue: '',            passedInputValue: ''        }    },    watch:{        inputValue() {            // 当inputValue数据发生变化以后,延迟三秒赋值给passedInputValue            setTimeout(() => {                this.passedInputValue = this.inputValue;            }, 3000)        }    }};</script>

此时你就会发现,当你在input输入框中输入文字以后,p标签内的数据不是立马改变,而是过三秒才会去渲染。

获取前一次的值

在某些场景中,我们会需要上一次的数据,此时,侦听器就可以给我们两个值,旧值和新值。

在上一个案例的基础上,我们只需要添加一个参数,即可获取旧值,代码如下:

watch:{    inputValue(value,oldValue) {        // 第一个参数为新值,第二个参数为旧值,不能调换顺序        console.log(`新值:${value}`);        console.log(`旧值:${oldValue}`);    }}

handler方法和immediate属性

前面我们已经知道,当我们侦听的值没有发生改变的时候,是不会触发侦听器的,并且,页面第一次渲染的时候也不会触发侦听器。

但是现在我有个需求就是要让页面第一次渲染的时候就去触发侦听器呢?

此时就要用到一个方法和一个属性。

<template>    <p>FullName: {{fullName}}</p>    <p>FirstName: <input type="text" v-model="firstName"></p></template>
<script>export default {    name: "app",    data(){        return {            firstName: 'Su',            lastName: 'Junyang',            fullName: ''        }    },    watch:{        firstName: {            handler(newName, oldName) {                this.fullName = newName + ' ' + this.lastName;            },            // 如果设置了false,那么在页面第一次渲染以后不会触发侦听器            immediate: true        }    }};</script>

deep 深度侦听

所谓深度侦听就是侦听对象内部属性的值。

我们之前用的侦听器都只能侦听一个变量的变化,(重点看一下代码中的注释)例如:

data:{    return {        // 字符串发生变化,可以侦听        firstName: 'Su',        room:{            name:"大床房",            // 当房号发生变化的时候,侦听器并不能侦听到。            // 因为侦听器只侦听到room,不能侦听number或者name            number: 302        }    }},

此时我们就需要深度侦听。

深度侦听在代码上并不难实现,只需要在handler的基础上添加一个deep属性,代码如下:

watch:{    room:{        handler(newRoom,oldRoom){            console.log("房间号发生了变化")        },        deep: true    }}

案例:使用侦听器和定时器实现伪模糊搜索

<template>  <div class="search">    <input type="text" v-model="inputValue" />    <div class="search-block" v-for="(element, index) in results" :key="index">      {{ element }}    </div>  </div></template>
<script>export default {  name: 'app',  data() {    return {      results: [],      mockData: [        '浙江大学',        '中国人民大学',        '清华大学',        '清华大学附属中学',        '浙江理工大学',        '浙江工业大学'      ],      inputValue: ''    };  },  watch: {    inputValue(value) {      if (!!value) {        setTimeout(() => {          this.results = this.mockData.filter(el => {            console.log(value);            return el.indexOf(value) !== -1;          });        }, 300);      }    }  }};</script>

到此,关于“vue中怎么实时监听本地存储”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vue中怎么实时监听本地存储

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vue中怎么实时监听本地存储

这篇文章主要介绍“vue中怎么实时监听本地存储”,在日常操作中,相信很多人在vue中怎么实时监听本地存储问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue中怎么实时监听本地存储”的疑惑有所帮助!接下来,请跟
2023-06-30

Vue中的Strorage本地化存储怎么实现

本文小编为大家详细介绍“Vue中的Strorage本地化存储怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue中的Strorage本地化存储怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Sto
2023-06-30

JavaScript本地存储怎么实现用户名存储

这篇文章主要介绍了JavaScript本地存储怎么实现用户名存储的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript本地存储怎么实现用户名存储文章都会有所收获,下面我们一起来看看吧。一、本地存储1
2023-07-02

vue中怎么同时监听多个参数

这篇文章主要讲解了“vue中怎么同时监听多个参数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue中怎么同时监听多个参数”吧!如何同时监听多个参数vue使用watch同时监听多个参数,其中
2023-06-29

JavaScript中本地存储和会话存储怎么用

小编给大家分享一下JavaScript中本地存储和会话存储怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前提知识请按照我以下的步骤来:1、在任意网页中按F1
2023-06-29

vue中怎么监听url地址栏参数变化

这篇“vue中怎么监听url地址栏参数变化”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue中怎么监听url地址栏参数变化
2023-07-05

Flutter本地存储之基本的键值对存储怎么实现

这篇文章主要介绍“Flutter本地存储之基本的键值对存储怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Flutter本地存储之基本的键值对存储怎么实现”文章能帮助大家解决问题。前言在原生的
2023-07-05

android中Glide实现加载图片保存至本地并加载回调监听

Glide 加载图片使用到的两个记录Glide 加载图片保存至本地指定路径 Glid
2023-05-30

怎么在本地Maven存储库损坏时强制更新

这篇文章主要介绍“怎么在本地Maven存储库损坏时强制更新”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么在本地Maven存储库损坏时强制更新”文章能帮助大家解决问题。1. 概述为了实现这一点,我
2023-06-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录