Vue的缓存方法示例详解

 更新时间:2021年03月12日 10:23:33   作者:是li同学呀  
这篇文章主要给大家介绍了关于Vue缓存方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

最近新做了个需求“前端缓存”

需求背景:解决表单高频率重复填报问题,要求打开页面自动填充上次录入的数据,数据存储期限为一周(7天有效期)。
说起缓存首先想到的则是 localstorage、sessionStorage

sessionStorage

也称会话缓存,当用户关闭浏览器窗口后,数据就会被删除;

sessionStorage.setItem("key","value");//存储
sessionStorage.getItems("key");//按可以进行取值
sessionStorage.removeItems("key");//按key单个删除
sessionStorage.clear();//删除全部数据
sessionStorage.length;//获取数据的数量
sessionStorage.valueOf();//获取全部值

localstorage

储存的数据没有时间限制,只要不删除,都会存在

localstorage.setItem("key","value");//保存数据
localstorage.getItem("key");//读取数据
localstorage.removeItem("key",);//删除单个数据
localstorage.clear();//删除所有数据
localstorage.key(index);//得到某个索引的key
key和value都必须为字符串,web Storage的API只能操作字符串

由于sessionStorage浏览器关闭窗口数据会被清空,所以对我所要开发的需求不适用。如果只考虑这两种方案的话,这么看来localstorage相对来说会比较合适,但是如果使用localstorage存储并且设置时效的话从代码层面来看会比较麻烦。

localstorage具体实现思路

1. 存储数据时加上时间戳

当数据较大时,可以利用localstorage,存数据时候写入一个时间,获取的时候再与当前时间进行比较

在项目开发中,我们可以写一个公用的方法来进行存储的时候加上时间戳

  export function setLocalStorageAndTime (key, value) {
  window.localStorage.setItem(key, JSON.stringify({ data: value, time: new Date().getTime() }))
  }

项目中应用

  有数据再进行存储 setLocalStorageAndTime('XXX', {name: 'XXX'})

2. 获取数据时与当前时间进行比较

export function getLocalStorageAndTime (key, exp = 86400000) {
 // 获取数据
 let data = window.localStorage.getItem(key)
 if (!data) return null
 let dataObj = JSON.parse(data)
 // 与过期时间比较
 if (new Date().getTime() - dataObj.time > exp) {
  // 过期删除返回null
  removeLocalStorage(key)
  console.log('信息已过期')
  return null
 } else {
  return dataObj.data
 }
}

程序员最大的特点就是懒,有插件就绝不会放过,能CV就绝对不手敲。由于写起来太繁琐,所以果断放弃使用localstorage,在另寻更简单方便的方法。通过同事的引荐最终选择了Vue.ls,那就来介绍介绍 Vue.ls吧。

Vue.ls

一个Vue封装的本地储存的方法。Vue插件,用于从Vue上下文中使用本地Storage,会话Storage和内存Storage,简单易上手,Api说明也是比较全面。

安装

NPM

npm install vue-ls --save

Yarn

yarn add vue-ls

使用

Vue-ls Storage API
import Storage from 'vue-ls';
 
options = {
 namespace: 'vuejs__', // key键前缀
 name: 'ls', // 命名Vue变量.[ls]或this.[$ls],
 storage: 'local', // 存储名称: session, local, memory
};
 
Vue.use(Storage, options);
// 或 Vue.use(Storage);
 
new Vue({
  el: '#app',
  mounted: function() {
    Vue.ls.set('foo', 'boo');
    // 设置有效期
    Vue.ls.set('foo', 'boo', 60 * 60 * 1000); //有效1小时
    Vue.ls.get('foo');
    Vue.ls.get('boo', 10); // 如果没有设置boo返回默认值10 
    
    let callback = (val, oldVal, uri) => {
     console.log('localStorage change', val);
    } 
    
    Vue.ls.on('foo', callback) //侦查改变foo键并触发回调 
    Vue.ls.off('foo', callback) //不侦查
    
    Vue.ls.remove('foo'); // 移除
  }
});

Global(全局)

Vue.ls

Context(上下文)

this.$ls

API 说明

Vue.ls.get(name, def)

返回storage中 name值。在返回之前,内部解析JSON中的值

def: 默认null, 如果为设置则返回 name.
Vue.ls.set(name, value, expire)

在storage设置 name的 value.并将 value转化为 JSON

expire: 默认为 null, name有效时间以毫秒为单位

Vue.ls.remove(name)

从 storage中移除 name. 成功移除 true, 否则返回false.

Vue.ls.clear()

清除storage.

Vue.ls.on(name, callback)

持续监听 name在其他标签上的更改,更改时触发 callback, 传递以下参数:

  • newValue: 当前storage中 name, 从持久化的JSON中解析
  • oldValue: 旧的storage中 name, 从持久化的JSON中解析
  • url: 修改来自选项卡的URL

Vue.ls.off(name, callback)

删除以前的侦听器 Vue.ls.on(name, callback)

实操

存储:键值对形式,最后一个参数为有效期

取值:参数为存进去的键

查看:存储的数据可在localstorage中查看

总结

localstorage(本地存储)则以文件的方式存储在本地,永久保存;sessionstorage( 会话存储 ) ,临时保存;Vue.ls是一个Vue封装的本地储存的方法,简单方便易上手。localStorage和sessionStorage只能存储字符串类型,对于复杂的对象可以使用ECMAScript提供的JSON对象的stringify和parse来处理。

到此这篇关于Vue的缓存方法的文章就介绍到这了,更多相关Vue缓存方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue3格式化Volar报错的原因分析与解决

    Vue3格式化Volar报错的原因分析与解决

    Volar 与vetur相同,volar是一个针对vue的vscode插件,下面这篇文章主要给大家介绍了关于Vue3格式化Volar报错的原因分析与解决方法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • 解析VUE中nextTick是什么

    解析VUE中nextTick是什么

    nextTick是Vue提供的一个全局API,由于Vue的异步更新策略导致我们对数据的修改不会立刻体现,在DOM变化上,此时如果想要立即获取更新后的DOM状态,就需要使用这个方法,这篇文章主要介绍了解析VUE中nextTick,需要的朋友可以参考下
    2022-11-11
  • webpack4+Vue搭建自己的Vue-cli项目过程分享

    webpack4+Vue搭建自己的Vue-cli项目过程分享

    这篇文章主要介绍了webpack4+Vue搭建自己的Vue-cli,对于vue-cli的强大,使用过的人都知道,极大的帮助我们降低了vue的入门门槛,感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-08-08
  • el-checkbox-group 的v-model无法绑定对象数组的问题解决

    el-checkbox-group 的v-model无法绑定对象数组的问题解决

    elementUI官方文档中el-checkbox-group组件绑定的都为一维数组,本文主要介绍了解决el-checkbox-group 的v-model无法绑定对象数组,感兴趣的可以了解一下
    2023-05-05
  • Vue实现数字时钟效果

    Vue实现数字时钟效果

    这篇文章主要为大家详细介绍了Vue实现数字时钟效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • vue等两个接口都返回结果再执行下一步的实例

    vue等两个接口都返回结果再执行下一步的实例

    这篇文章主要介绍了vue等两个接口都返回结果再执行下一步的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • vue中bus的使用及踩坑解决

    vue中bus的使用及踩坑解决

    这篇文章主要为大家详细介绍了vue中bus的相关使用以及涉及到的问题与解决,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-08-08
  • 解决vue-cli项目开发运行时内存暴涨卡死电脑问题

    解决vue-cli项目开发运行时内存暴涨卡死电脑问题

    最近开发一个vue项目时遇到电脑卡死问题,突然间系统就非常卡,然后卡着卡着就死机了,鼠标也动不了了,只能冷启动。这篇文章主要介绍了vue-cli项目开发运行时内存暴涨卡死电脑问题,需要的朋友可以参考下
    2019-10-10
  • vue实现多个el-form表单提交统一校验的2个方法

    vue实现多个el-form表单提交统一校验的2个方法

    这篇文章主要给大家介绍了关于vue实现多个el-form表单提交统一校验的2个方法,文中通过代码示例介绍的非常详细,对大家学习或使用vue具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • 在vue3项目中使用新版高德地图的完整步骤

    在vue3项目中使用新版高德地图的完整步骤

    项目需求需要引入地图,对于目前最新的Vue3.0,无论是百度/高德/腾讯地图目前还没有适配,只有Vue 2.x版本的: 目前只有谷歌地图的Vue3.0适配,下面这篇文章主要给大家介绍了关于如何在vue3项目中使用新版高德地图的完整步骤,需要的朋友可以参考下
    2023-02-02

最新评论