一、在main.js中引用indexDb

import Vue from 'vue'
import indexDb from './api/indexDb'let storeName  = { index: ['tableView'], name: 'tableView', key: 'menuid' } //index:索引、name:表名、key:主键
indexDb.openDB('spreadTableView', 1, storeName, function(db){Vue.prototype.$tableDb = db //全局保存数据库
})

2、操作数据库方法

//举例,业务代码
...
<script>
import indexDb from './api/indexDb'
...
export default {...mounted(){let list = [{...}]let allDbData = indexDb.getAllData(this.$tableDb, 'tableView')let flagIndex = indexDb.readAllData(this.$tableDb, list)if(flagIndex == -1){indexDb.addData(this.$tableDb, 'tableView', list)}else{indexDb.updateData(this.$tableDb, 'tableView', list)}}...
}
</script>

3、封装indexDb.js

export default {// indexedDB兼容indexedDB: window.indexedDB || window.webkitindexedDB || window.msIndexedDB || window.mozIndexedDB,/*** 打开数据库* 新对象储存空间newStore参数:newStore.name、newStore.key* 新增对象存储空间要更改数据库版本* @param {数据库名称} dbname * @param {版本} version * @param {数据库} db * @param {配置} newStore * @param {回调函数} callback */openDB(dbname, version, newStore, callback) {let dbversion = version || 1;const request = this.indexedDB.open(dbname, version);request.onerror = function () {console.log('IndexedDB数据库打开错误');};request.onsuccess = function (event) {db = event.target.result;if (callback && (typeof callback === 'function')) {callback(db);}};// onupgradeneeded,调用创建新的储存空间request.onupgradeneeded = function (event) {db = event.target.result;if (newStore) {if (!db.objectStoreNames.contains(newStore.name)) {const objectStore = db.createObjectStore(newStore.name, {keyPath: newStore.key,});newStore.index.forEach(item => {objectStore.createIndex(item + '_index', item, {unique: false});})}}};},/*** 删除数据库* @param {*} dbname * @param {*} callback */deleteDb(dbname, callback) {const deleteQuest = this.indexedDB.deleteDatabase(dbname);deleteQuest.onerror = function () {console.log('删除数据库出错');};deleteQuest.onsuccess = function () {if (callback && (typeof callback === 'function')) {callback();}}},/*** 关闭数据库* @param {*} dbname */closeDB(dbname) {dbname.close();console.log('数据库已关闭');},/*** 删除数据* @param {*} db * @param {*} storename * @param {*} key * @param {*} callback */deleteData(db, storename, key, callback) {const store = db.transaction(storename, 'readwrite').objectStore(storename);const request = store.delete(key);request.onsuccess = function () {if (callback && (typeof callback === 'function')) {callback('删除成功');}}request.onerror = function () {if (callback && (typeof callback === 'function')) {callback('删除失败');}}},/*** 清空数据* @param {*} db * @param {*} storename * @param {*} callback */clearData(db, storename, callback) {const store = db.transaction(storename, 'readwrite').objectStore(storename);const request = store.clear();request.onsuccess = function () {if (callback && (typeof callback === 'function')) {callback('清空数据成功');}}request.onerror = function () {if (callback && (typeof callback === 'function')) {callback('清空数据失败');}}},/*** 添加数据* @param {*} db * @param {*} storename * @param {*} obj */addData(db, storename, list) {const store = db.transaction(storename, 'readwrite').objectStore(storename);list.forEach(ls => {const request = store.add(ls);request.onsuccess = function () {console.log('数据写入成功');};request.onerror = function () {console.log('数据写入失败');}})},/*** 更新数据* @param {*} db * @param {*} storename * @param {*} obj */updateData(db, storename, list) {const store = db.transaction(storename, 'readwrite').objectStore(storename);list.forEach(ls => {const request = store.put(ls);request.onsuccess = function () {console.log('数据更新成功');};request.onerror = function () {console.log('数据更新失败');}})},/*** 根据主键获取数据* @param {*} db * @param {*} storeName * @param {*} key * @returns */getData(db, storeName, key){var objectStore = db.transaction(storeName).objectStore(storeName);var request = objectStore.get(key);request.onerror = function(event) {console.log('事务失败');};return new Promise((resolve, reject) => {request.onsuccess = function (e) {resolve(e.target.result)}})},/*** 根据索引获取数据* @param {*} db * @param {*} storeName * @param {*} field * @param {*} val */getDataByIndex(db, storeName, field, val) {const objectStore = db.transaction(storeName).objectStore(storeName);const index = objectStore.index(field + '_index');const request = index.get(val);return new Promise((resolve, reject) => {request.onsuccess = function (e) {resolve(e.target.result)}})},/*** 获取全部数据* @param {*} db * @param {*} storeName * @returns */getAllData(db, storeName) {const objectStore = db.transaction(storeName).objectStore(storeName);const request = objectStore.openCursor();let data = [];return new Promise((resolve, reject) => {request.onsuccess = function (e) {var cursor = e.target.result;if (cursor) {data.push(cursor.value);cursor.continue();} else {resolve(data)}}})},/*** 遍历全部数据,判断数据是否已存在于数据库* @param {*} allDbData* @param {*} list* @returns */readAllData(allDbData, list){let flagIndexallDbData.then(res => { flagIndex = res.findIndex(val=>{return (val.menuid == list[0].menuid)})})return flagIndex}
}

vue中indexDb缓存使用相关推荐

  1. vue中keep-alive缓存的使用

    keep-alive是什么? <keep-alive /> 是一个vue中内置组件:它自身不会渲染一个 DOM 元素,也不会出现在组件的父组件链中. 使用<keep-alive /& ...

  2. vue中keepAlive缓存清除的问题

    vue项目中经常会用到keepalive来做缓存,在应付基本要求上可以说非常方便.但是遇到同一个页面,根据条件不同,分别缓存或者不缓存,就有些麻烦了. 首先先把坑列出来: 1. <keep-al ...

  3. vue中页面缓存后destroyed失效,如何关闭定时器

    场景 页面中设置了定时器,如果组件销毁是没有关闭定时器,他还会一直执行,会非常耗性能,所以需要及时关闭定时器. 关闭定时器 vue项目中,正常情况下,我们在生命周期 destroyed 中关闭即可,一 ...

  4. keep alive PHP,vue中keep-alive使用方法详解

    这次给大家带来vue中keep-alive使用方法详解,vue中keep-alive使用的注意事项有哪些,下面就是实战案例,一起来看一下. 1.keep-alive的作用以及好处 在做电商有关的项目中 ...

  5. vue中怎么清空tab选项卡的缓存_vue Tab切换以及缓存页面处理的几种方式

    前言 相信tab切换对于大家来说都不算陌生,后台管理系统中多会用到.如果不知道的话,可以看一下浏览器上方的标签页切换,大概效果就是这样. 1.如何切换 使用动态组件,相信大家都能看懂(部分代码省略) ...

  6. vue中的浏览量_vue中前进刷新、后退缓存用户浏览数据和浏览位置的实践

    从列表页 ------> 详情页, 再从详情页 -----> 列表页 ,要保存上次已经加载的数据和自动还原上次的浏览位置 1. 缓存组件,vue2中提供了keep-alive.首先在我们的 ...

  7. vue中使用keepAlive组件缓存遇到的坑

    项目开发中在用户由分类页category进入detail需保存用户状态,查阅了Vue官网后,发现vue2.0提供了一个keep-alive组件. 上一篇讲了keep-alive的基本用法,现在说说遇到 ...

  8. vue中前进刷新、后退缓存用户浏览数据和浏览位置的实践

    vue中,我们所要实现的一个场景就是: 1.搜索页面==>到搜索结果页时,搜索结果页面要重新获取数据, 2.搜索结果页面==>点击进入详情页==>从详情页返回列表页时,要保存上次已经 ...

  9. vue缓存服务器文件到本地,vue中,在本地缓存中读写数据的方法

    1.安装good-storage插件 cnpm i good-storage --save 2.读/写的方法 common/js/cache.js: import storage from 'good ...

最新文章

  1. JS判断当前使用的是哪个浏览器及其版本
  2. An internal error occurred during: Launching New_configuration.
  3. 370万开发者,14万家企业!飞桨中国行落地深圳 激发AI软硬件创新发展新动能...
  4. java 抽象类的匿名类_Java匿名内部类(通过继承抽象类来实现)
  5. Python第六次作业
  6. android callmanager.java,如何使用Mobile-SDK-Android正确注销DJISDKManager和SDKManagerCallback应用程序?...
  7. 网站的版面设计,商业Web站点设计策略,网站CI形象设计,网页色彩的搭配
  8. Android studio引入XUI
  9. 2012服务器清理系统盘,windows2012磁盘清理
  10. 为什么荒野行动服务器信息卡了,荒野行动画面卡顿的原因是什么?荒野行动画面卡顿的快速有效解决方法...
  11. 什么牌子的洗地机最适合家用?洗地机品牌排行榜前十名推荐
  12. Java的开发架构---浅谈
  13. 如何进入BIOS设置界面
  14. 有极性电容和无极性电容区别
  15. [系统安全] 二十一.PE数字签名之(中)Signcode、PEView、010Editor、Asn1View工具用法
  16. 送人玫瑰手留余香——分享快乐、快乐分享
  17. 华大半导体正式成为RT-Thread高级会员
  18. 【React】redux和React-redux
  19. Laravel中的任务计划
  20. javascript原生—悬浮导航栏

热门文章

  1. erpnext--总结1
  2. js-metisMenu
  3. 数值分析-计算机中的数系与运算特点
  4. 网络安全从入门到精通:30天速成教程到底有多狠?你能坚持下来么?
  5. Ubuntu中compiz 安装与设置
  6. win10提示“无法枚举容器中的对象 访问被拒绝”如何解决
  7. emqttd的启动脚本
  8. 用挂载U盘的方式实现PC和开发板ARM-LINUX之间的文件传输
  9. 简单读懂人工智能:机器学习与深度学习是什么关系
  10. 【ae】图层样式(ps里的图层样式)