在Vue中使用IndexedDB的实用指南

server/2024/12/14 8:41:06/

前言

欢迎来到我的技术小宇宙!这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。

洛可可白

  • 个人主页 - https://blog.csdn.net/interest_ing_/
  • 个人专栏 - 前端技术
  • 个人专栏 - 后端技术
  • 个人博客 - https://bestwishes0203.github.io/blog/

代码获取

  • Gitee - https://gitee.com/bestwishes0203

封面壁纸

  • 洛可可白 - https://wallpaper.seenav.cn/
在这里插入图片描述

在Vue中使用IndexedDB的实用指南

引言

随着前端应用的复杂度增加,对于客户端存储的需求也在不断增长。IndexedDB作为一种强大的浏览器数据库,提供了存储大量结构化数据的能力。本文将介绍如何在Vue中封装和使用IndexedDB,包括Options API和Composition API的示例。

IndexedDB简介

IndexedDB是一个在浏览器中运行的非关系型数据库,它允许网页应用存储和检索大量结构化数据。与LocalStorage相比,IndexedDB提供了更高级的数据存储和查询能力,支持事务、索引和二进制数据存储。

封装IndexedDB操作

为了简化IndexedDB的使用,我们可以封装一系列操作,如打开数据库、添加数据、获取数据、更新数据和删除数据。以下是db.js文件的封装示例:
// db.js
const DB_NAME = 'my-database';
const DB_VERSION = 1;
const STORE_NAME = 'my-store';// 打开数据库
function openDB() {return new Promise((resolve, reject) => {const request = indexedDB.open(DB_NAME, DB_VERSION);request.onerror = (event) => {reject('Database error: ' + event.target.errorCode);};request.onsuccess = (event) => {resolve(event.target.result);};request.onupgradeneeded = (event) => {const db = event.target.result;if (!db.objectStoreNames.contains(STORE_NAME)) {db.createObjectStore(STORE_NAME, { keyPath: 'id', autoIncrement: true });}};});
}// 添加数据
function addData(data) {return new Promise((resolve, reject) => {openDB().then((db) => {const transaction = db.transaction([STORE_NAME], 'readwrite');const store = transaction.objectStore(STORE_NAME);const request = store.add(data);request.onsuccess = () => {resolve(request.result);};request.onerror = () => {reject(request.error);};}).catch(reject);});
}// 获取数据
function getData(key) {return new Promise((resolve, reject) => {openDB().then((db) => {const transaction = db.transaction([STORE_NAME], 'readonly');const store = transaction.objectStore(STORE_NAME);const request = store.get(key);request.onsuccess = () => {resolve(request.result);};request.onerror = () => {reject(request.error);};}).catch(reject);});
}// 更新数据
function updateData(key, data) {return new Promise((resolve, reject) => {openDB().then((db) => {const transaction = db.transaction([STORE_NAME], 'readwrite');const store = transaction.objectStore(STORE_NAME);const request = store.put(data);request.onsuccess = () => {resolve(request.result);};request.onerror = () => {reject(request.error);};}).catch(reject);});
}// 删除数据
function deleteData(key) {return new Promise((resolve, reject) => {openDB().then((db) => {const transaction = db.transaction([STORE_NAME], 'readwrite');const store = transaction.objectStore(STORE_NAME);const request = store.delete(key);request.onsuccess = () => {resolve(request.result);};request.onerror = () => {reject(request.error);};}).catch(reject);});
}export { addData, getData, updateData, deleteData };

Options API 示例

在Vue组件中使用Options API调用utils工具:
<template><div><h1>IndexedDB Operations</h1><button @click="addItem">Add Item</button><button @click="getItem">Get Item</button><button @click="updateItem">Update Item</button><button @click="deleteItem">Delete Item</button></div>
</template><script>javascript">
import { addData, getData, updateData, deleteData } from './db';export default {data() {return {itemId: 1,itemName: 'New Item'};},methods: {addItem() {addData({ id: this.itemId, name: this.itemName }).then(() => alert('Item added')).catch((error) => alert('Error adding item: ' + error));},getItem() {getData(this.itemId).then((item) => alert(`Item retrieved: ${JSON.stringify(item)}`)).catch((error) => alert('Error retrieving item: ' + error));},updateItem() {updateData(this.itemId, { id: this.itemId, name: 'Updated Item' }).then(() => alert('Item updated')).catch((error) => alert('Error updating item: ' + error));},deleteItem() {deleteData(this.itemId).then(() => alert('Item deleted')).catch((error) => alert('Error deleting item: ' + error));}}
};
</script>

Composition API 示例

在Vue组件中使用Composition API调用utils工具:
<template><div><h1>IndexedDB Operations</h1><button @click="addItem">Add Item</button><button @click="getItem">Get Item</button><button @click="updateItem">Update Item</button><button @click="deleteItem">Delete Item</button></div>
</template><script>
import { ref } from 'vue';
import { addData, getData, updateData, deleteData } from './db';export default {setup() {const itemId = ref(1);const itemName = ref('New Item');const addItem = () => {addData({ id: itemId.value, name: itemName.value }).then(() => alert('Item added')).catch((error) => alert('Error adding item: ' + error));};const getItem = () => {getData(itemId.value).then((item) => alert(`Item retrieved: ${JSON.stringify(item)}`)).catch((error) => alert('Error retrieving item: ' + error));};const updateItem = () => {updateData(itemId.value, { id: itemId.value, name: 'Updated Item' }).then(() => alert('Item updated')).catch((error) => alert('Error updating item: ' + error));};const deleteItem = () => {deleteData(itemId.value).then(() => alert('Item deleted')).catch((error) => alert('Error deleting item: ' + error));};return {addItem,getItem,updateItem,deleteItem,itemId,itemName};}
};
</script>
这样,你就可以在Vue页面中使用封装好的IndexedDB操作了。记得将db.js文件放在项目的合适位置,并确保它被正确导入。

如果对你有帮助,点赞👍、收藏💖、关注🔔是我更新的动力!👋🌟🚀


http://www.ppmy.cn/server/150051.html

相关文章

SpringBoot结合Maven的多模块设计架构模式

SpringBoot结合Maven的多模块设计是一种常见的架构模式&#xff0c;它允许开发者将大型应用程序分解为更小、更易于管理的模块。这种设计不仅有助于提高代码的可读性、可维护性和可扩展性&#xff0c;而且还能促进团队协作&#xff0c;使不同的开发人员或小组可以专注于特定的功…

javaWeb之过滤器(Filter)

目录 前言 过滤器概述 什么是过滤器 过滤器详细 过滤器的生命周期 过滤器的应用 创建一个简单的Filter类步骤 注意&#xff1a;指定拦截路径&#xff0c;我们有两种方式 实例 前言 本篇博客的核心 知道过滤器的整个拦截过程知道如何指定拦截路径知道过滤器的生命周期…

Java学习教程,从入门到精通,Java Stack(堆栈)语法知识点及语法知识点(58)

Java Stack&#xff08;堆栈&#xff09;语法知识点详解 一、概述 栈&#xff08;Stack&#xff09;是一种后进先出&#xff08;Last In First Out, LIFO&#xff09;或先进后出&#xff08;First In Last Out, FILO&#xff09;的数据结构&#xff0c;它只允许在一端&#x…

SpringBoot整合JWT(JSON Web Token)生成token与验证

目录 JWT 什么是JWT JWT使用流程 确定要传递的信息: 生成JWT: JWT传输: 客户端保存JWT: 客户端发送JWT: 服务器验证JWT: 服务器响应: Token的使用示例: 工具类 R结果集 返回一个生成的token 创建拦截器 JWT 什么是JWT JWT(JSON Web Token)是是目前最…

组合模式的理解和实践

组合模式&#xff08;Composite Pattern&#xff09;&#xff0c;又称为部分-整体模式&#xff0c;是结构型设计模式的一种。它允许你将对象组合成树形结构来表现“整体/部分”的层次结构&#xff0c;使得用户对单个对象和组合对象的使用具有一致性。换句话说&#xff0c;组合模…

01小程序基础

一、基本准备 官方网址&#xff1a;微信公众平台小程序注册&#xff1a;小程序小程序文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework/ 二、工具下载 第一步&#xff1a;第二步&#xff1a;第三步&#xff1a;选择稳定版的开发工具&#xff0c…

PostgreSQL数据库序列信息查询

PostgreSQL序列信息查询 说明&#xff1a; 在PostgreSQL数据库中序列和表都是序列的对象。 数据库中不应该存在孤儿序列&#xff0c;序列应该和表对应的字段绑定起来。绑定后删除表或表对应的字段后&#xff0c;序列会自动被删除。 创建测试表和序列 create table test_t(…

CSS盒模型

盒模型的组成部分 内容&#xff08;Content&#xff09; 内容是盒模型的核心部分&#xff0c;是元素中实际包含的文本、图像或其他HTML元素等信息。例如&#xff0c;在一个<p>标签中的文字部分就是内容。它的大小可以通过width和height属性来设置。不过要注意&#xff0c…