vue 监听localstorage值发生变化

1.项目新增一个tool.js文件,复制代码如下:

//****将这段内容放在tool.js文件中****
// 重写setItem事件,当使用setItem的时候,触发,window.dispatchEvent派发事件
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)
    signSetItem.apply(this, arguments)
  }
}

export default dispatchEventStroage;

2.main.js中引入该js:

import tool from "./plugins/tool.js";
Vue.use(tool);

3在需要监听的文件中:

    //解决this指向问题,在window.addEventListener中this是指向window的。
    //需要将vue实例赋值给_this,这样在window.addEventListener中通过_this可以为vue实例上data中的变量赋值
    let _this=this;
    //根据自己需要来监听对应的key
    window.addEventListener("setItemEvent",function(e){
        //e.key : 是值发生变化的key  //例如 e.key==="token"  //e.newValue : 是可以对应的新值
        // console.log(e)
        if(e.key==="InteligenceData"){
          let newV = JSON.parse(e.newValue)
          newV.forEach((item)=>{
              item.type = '1' // 为拆条列表添加进来的数据加一个type
              if(item.ip_type == 3){
                _this.audioData.push(item)
              }else{
                _this.InteligenceData.push(item)
              }
           })
        }
    })

参考https://www.jb51.net/article/261226.htm

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Vue中,可以使用`$watch`来监听localStorage的变化。 首先在data中定义一个变量来存储localStorage中的,然后在mounted钩子函数中使用`$watch`监听该变量。 ``` data() { return { localStorageValue: localStorage.getItem('key') } }, mounted() { this.$watch( () => localStorage.getItem('key'), (newValue) => { this.localStorageValue = newValue } ) } ``` 在上面的代码中,`$watch`监听的是`localStorage.getItem('key')`的,当该发生变化时,就会触发回调函数。回调函数中更新了`localStorageValue`变量的。 ### 回答2: Vue通过watch属性提供了一种便捷的方式来监听localStorage的变化。要使用此功能,需要先定义一个Vue实例,并将localStorage绑定到其data属性中。例如: ```javascript var app = new Vue({ el: '#app', data: { localStorageValue: localStorage.getItem('myKey') }, watch: { localStorageValue: function (newVal, oldVal) { // 在这里执行你的代码 } } }) ``` 在上面的代码中,我们定义了一个名为“localStorageValue”的data属性,它的绑定到localStorage存储中的“myKey”键。然后,我们使用Vue的watch属性定义一个名为“localStorageValue”的监听器。该监听器将在localStorage发生变化时被触发,参数newVal表示新的localStorage,oldVal表示旧的localStorage。 我们可以在监听器函数中编写一些代码来响应localStorage的变化。例如,您可以更新视图,从而将新的localStorage反映在用户界面中。 需要注意的是,localStorage的变化可能由多个来源引起,因此您可能需要执行某些条件检查来确保只有合法的被处理。此外,如果您需要在页面加载时获取localStorage的初始,请记得添加一些初始代码来执行此操作。例如: ```javascript var app = new Vue({ el: '#app', data: { localStorageValue: '' }, watch: { localStorageValue: function (newVal, oldVal) { // 在这里执行你的代码 } }, mounted: function () { this.localStorageValue = localStorage.getItem('myKey') } }) ``` 在上面的代码中,我们在Vue的mounted函数中添加了一行代码,以获取localStorage的初始并将其分配给Vue实例的localStorageValue属性。这将确保Vue实例在加载时反映localStorage的当前状态,并立即开始监听的变化。 ### 回答3: Vue.js是一个流行的JavaScript框架,它提供了方便的前端组件化开发方式。在Vue中,当页面中有多个组件需要共享某些数据时,可通过Vuex来实现共享数据的管理。然而,在某些情况下,我们也需要监听localStorage的变化,以便做出适当的响应,本文将介绍如何在Vue监听localStorage的变化。 1. 实现一个localStorage封装函数 我们可以写一个localStorage的封装函数,来监听localStorage的变化。 ``` function getLocalStorage(key) { const value = localStorage.getItem(key); try { return JSON.parse(value); } catch(e) { return value; } } function setLocalStorage(key, value) { localStorage.setItem(key, JSON.stringify(value)); } function removeLocalStorage(key) { localStorage.removeItem(key); } ``` 2. 通过自定义指令监听localStorage的变化 我们也可以通过自定义指令的方式来监听localStorage的变化。首先定义如下指令: ``` Vue.directive('local', { bind(el, binding) { el.value = getLocalStorage(binding.arg); el.addEventListener('input', () => { setLocalStorage(binding.arg, el.value); }); window.addEventListener('storage', (event) => { if (event.key === binding.arg) { el.value = getLocalStorage(binding.arg); } }); } }); ``` 然后在Vue组件中使用: ``` <template> <div> <input v-local="'name'" placeholder="请输入用户名"></input> <p>用户名:{{name}}</p> </div> </template> <script> export default { computed: { name: { get() { return getLocalStorage('name'); }, set(value) { setLocalStorage('name', value); } } } }; </script> ``` 通过上述方法,我们成功的监听localStorage的变化,实现了在Vue中动态地设置和获取localStorage

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值