返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue中如何实时监听本地存储
  • 699
分享到

vue中如何实时监听本地存储

2024-04-02 19:04:59 699人浏览 薄情痞子
摘要

目录如何实时监听本地存储Vue监听数据变化watch的基本用法获取前一次的值handler方法和immediate属性deep 深度侦听如何实时监听本地存储 在main.js中 Vu

如何实时监听本地存储

在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>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。 

--结束END--

本文标题: vue中如何实时监听本地存储

本文链接: https://lsjlt.com/news/147761.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • vue中如何实时监听本地存储
    目录如何实时监听本地存储vue监听数据变化watch的基本用法获取前一次的值handler方法和immediate属性deep 深度侦听如何实时监听本地存储 在main.js中 Vu...
    99+
    2024-04-02
  • vue中怎么实时监听本地存储
    这篇文章主要介绍“vue中怎么实时监听本地存储”,在日常操作中,相信很多人在vue中怎么实时监听本地存储问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue中怎么实时监听本地存储”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
  • HTML 5本地存储的兼容性与存储监听举例分析
    本篇内容介绍了“HTML 5本地存储的兼容性与存储监听举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • vue如何实时监听input值的变化
    本篇内容介绍了“vue如何实时监听input值的变化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、vuejs 2.0中js实时监听inp...
    99+
    2023-07-04
  • js如何实现本地存储
    这篇文章主要介绍了js如何实现本地存储,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在客户端运行的JS是不能操作用户电脑磁盘中的文件的(保护...
    99+
    2024-04-02
  • Vue中的Strorage本地化存储怎么实现
    本文小编为大家详细介绍“Vue中的Strorage本地化存储怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue中的Strorage本地化存储怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Sto...
    99+
    2023-06-30
  • vue中如何监听url地址栏参数变化
    目录vue监听url地址栏参数变化1、传递参数2、监听参数变化vue检测url的变化-Kaiqisan总结vue监听url地址栏参数变化 问题: 在开发过程中我们有可能会遇到一个问题...
    99+
    2023-03-10
    vue监听 监听url地址栏参数 vue地址栏参数
  • vue如何监听页面缓存事件
    目录监听页面缓存事件事情的起因是这样的监听缓存事件代码在main创建缓存事件在组件生命周期中在组件业务代码监听页面缓存事件 事情的起因是这样的 项目中需要用到websocket,在网...
    99+
    2024-04-02
  • vue监听滚动事件如何实现滚动监听
    这篇文章主要为大家展示了“vue监听滚动事件如何实现滚动监听”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue监听滚动事件如何实现滚动监听”这篇文章吧。在vu...
    99+
    2024-04-02
  • vue-lsvue本地储存的实例讲解
    目录安装NpmYarn使用Global(全局)Context(上下文)API 说明vue-ls介绍Vue插件,用于从Vue上下文中使用本地Storage,会话Storage和内存St...
    99+
    2024-04-02
  • Vue中的Strorage本地化存储详解
    目录Storage本地化存储localStoragesessionStorageStrorage本地存储实例在model文件夹下面新建一个storage.js创建storeStora...
    99+
    2024-04-02
  • Vue中如何watch监听属性
    这篇文章主要介绍了Vue中如何watch监听属性,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。首先要确认 watch是一个对象,要当成对象来使用。键:就是那个,你要监听的那个...
    99+
    2023-06-21
  • vue关闭页面时如何去掉监听
    这篇文章主要介绍了vue关闭页面时如何去掉监听的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue关闭页面时如何去掉监听文章都会有所收获,下面我们一起来看看吧。在使用 Vue.js 开发 web 应用程序过程中...
    99+
    2023-07-06
  • vue如何实现本地存储添加删除修改功能
    这篇文章给大家分享的是有关vue如何实现本地存储添加删除修改功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下实现功能:输入的内容添加到正在进行列表中,双击修改功能,点击esc键,取消,还是之前的内容...
    99+
    2023-06-21
  • html5中如何使用LocalStorage本地存储
    本篇文章为大家展示了html5中如何使用LocalStorage本地存储,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 一、本地存储  ...
    99+
    2024-04-02
  • 如何在html5中使用localStorage实现本地存储
    本篇文章给大家分享的是有关如何在html5中使用localStorage实现本地存储,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。localStorage.name="...
    99+
    2023-06-09
  • vue中同时监听多个参数的实现
    目录如何同时监听多个参数data中定义一个对象完整代码vue事件监听,条件判断事件监听 v-on条件判断如何同时监听多个参数 vue使用watch同时监听多个参数,其中有任意一个参数...
    99+
    2024-04-02
  • python如何在word中存储本地图片
    想要利用Python来操作word文档可以使用docx模块. 安装: pip install python-docx from docx import Document from...
    99+
    2024-04-02
  • vue中怎么生成token并保存到本地存储
    这篇文章给大家介绍vue中怎么生成token并保存到本地存储,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首先回顾一下token:token认证是RESTFUL.api的一个很重要的部...
    99+
    2024-04-02
  • Vue页面监听用户预览时间功能如何实现
    这篇文章主要介绍“Vue页面监听用户预览时间功能如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue页面监听用户预览时间功能如何实现”文章能帮助大家解决问题...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作