您的位置:首页 > 娱乐 > 八卦 > 网页设计如何引入模板_网站开发的意义和目的_个人网站推广_南宁seo专员

网页设计如何引入模板_网站开发的意义和目的_个人网站推广_南宁seo专员

2024/10/6 18:23:53 来源:https://blog.csdn.net/m0_56104994/article/details/142496402  浏览:    关键词:网页设计如何引入模板_网站开发的意义和目的_个人网站推广_南宁seo专员
网页设计如何引入模板_网站开发的意义和目的_个人网站推广_南宁seo专员

1.前端缓存几种方式: cookie、localStorage、sessionStorage、indexedDB,下面详细介绍indexedDB

2.完整代码

class DBManager {dbName: any = null;version: any = null;db: any = null;/*** 初始化数据库名、版本* @param dbName* @param version*/constructor(dbName: String, version: String | Number) {this.dbName = dbName;this.version = version;this.db = null;}/*** 打开数据库* @param callback* @returns*/openDB(storeName?: String, keyPath?: String, keys?: Array<any>) {return new Promise((resolve, reject) => {if (this.db) {resolve(this.db);} else {const cmd = indexedDB.open(this.dbName, this.version);cmd.onsuccess = (e: any) => {this.db = e.target.result;resolve(this.db);};cmd.onerror = (e: any) => {reject(e.target.error);};cmd.onupgradeneeded = (e: any) => {this.db = e.target.result;this.createStore(storeName, keyPath, keys);};}});}/*** 关闭数据库*/closeDB() {if (this.db) {this.db.close();this.db = null;}}/*** 删除数据库* @returns*/deleteDB() {return new Promise((resolve, reject) => {this.closeDB();const cmd = indexedDB.deleteDatabase(this.dbName);cmd.onsuccess = (e: any) => {resolve("");};cmd.onerror = (e: any) => {reject(e.target.error);};});}/*** 创建对象仓库* @param storeName* @param keyPath* @param keys* @returns*/createStore(storeName?: String, keyPath?: String, keys?: Array<any>) {return new Promise(async (resolve, reject) => {if (this.db) {const store = this.db.createObjectStore(storeName, {keyPath: keyPath,autoIncrement: true,});if (keys) {keys.forEach((key: any) => {store.createIndex(key, key, { unique: key === keyPath ? true : false });});}resolve(this.db);} else {reject("数据库未打开createStore");}});}/*** 增加数据* @param storeName* @param data* @returns*/insert(storeName: String, data: any) {return new Promise((resolve, reject) => {if (this.db) {const transaction = this.db.transaction(storeName, "readwrite");const store = transaction.objectStore(storeName);const cmd = store.add(data);cmd.onsuccess = (e: any) => {resolve(e.target.result);};cmd.onerror = (e: any) => {reject(e.target.error);};} else {reject("数据库未打开");}});}/*** 查询数据,默认根据主键查询* @param storeName* @param value* @returns*/queryByKey(storeName: String, value: any) {return new Promise((resolve, reject) => {if (this.db) {const transaction = this.db.transaction(storeName, "readonly");const store = transaction.objectStore(storeName);const cmd = store.get(value);cmd.onsuccess = (e: any) => {resolve(e.target.result);};cmd.onerror = (e: any) => {reject(e.target.error);};} else {reject("数据库未打开");}});}/*** 查询全部数据记录* @param storeName* @returns*/queryAll(storeName: String) {return new Promise((resolve, reject) => {if (this.db) {const transaction = this.db.transaction(storeName, "readonly");const store = transaction.objectStore(storeName);const cmd = store.getAll();cmd.onsuccess = (e: any) => {resolve(e.target.result);};cmd.onerror = (e: any) => {reject(e.target.error);};} else {reject("数据库未打开");}});}/*** 通过游标查询,跟queryByIndex的区别是:游标查询可定义查询条件,比如年龄在18-24之间的数据* @param storeName* @param range 查询条件* @param direction 排序顺序* @returns*/queryByCursor(storeName: String, key?: String, range?: any, direction: String = "next") {return new Promise((resolve, reject) => {if (this.db) {const transaction = this.db.transaction(storeName, "readonly");const store = transaction.objectStore(storeName);const index = key ? store.index(key) : "";const cursor = range ? index.openCursor(range, direction) : store.openCursor();const result: Array<any> = [];cursor.onsuccess = (e: any) => {const cursor = e.target.result;if (cursor) {result.push(cursor.value);cursor.continue();}resolve(result);};cursor.onerror = (e: any) => {reject(e.target.error);};} else {reject("数据库未打开");}});}/*** 通过键值对查询* @param storeName* @param indexName* @param value* @returns 获取:键为indexName,值为value 的那条数据*/queryByIndex(storeName: String, indexName: String, value: any) {return new Promise((resolve, reject) => {if (this.db) {const transaction = this.db.transaction(storeName, "readonly");const store = transaction.objectStore(storeName);const cmd = store.index(indexName).get(value);cmd.onsuccess = (e: any) => {resolve(e.target.result);};cmd.onerror = (e: any) => {reject(e.target.error);};} else {reject("数据库未打开");}});}/*** 更新数据* @param storeName* @param key* @param data* @returns*/update(storeName: String, key: String, newData: any) {return new Promise((resolve, reject) => {if (this.db) {const transaction = this.db.transaction(storeName, "readwrite");const store = transaction.objectStore(storeName);const cmd = store.get(key);cmd.onsuccess = (e: any) => {let data = e.target.result;Object.assign(data, newData);const requestUpdate = store.put(data);requestUpdate.onsuccess = (e: any) => {resolve(e.target.result);};requestUpdate.onerror = (e: any) => {reject(e.target.error);};};cmd.onerror = (e: any) => {reject(e.target.error);};} else {reject("数据库未打开");}});}/*** 删除数据* @param storeName* @param key* @returns*/delete(storeName: String, key: String) {return new Promise((resolve, reject) => {if (this.db) {const transaction = this.db.transaction(storeName, "readwrite");const store = transaction.objectStore(storeName);const cmd = store.delete(key);cmd.onsuccess = (e: any) => {resolve(e.target.result);};cmd.onerror = (e: any) => {reject(e.target.error);};} else {reject("数据库未打开");}});}
}
export default DBManager;

3.在项目中使用

template:<button @click="learnDb('open')">打开</button><button @click="learnDb('add')">添加</button><button @click="learnDb('search')">查询</button><button @click="learnDb('delete')">删除</button><button @click="learnDb('update')">更新</button><button @click="learnDb('close')">关闭</button><button @click="learnDb('clearn')">清除</button>script://学习indexedDB
let myDB = new DBManager("zhengjie", 1);
let learnDb = async (type: String) => {if (type == "clearn") {myDB.deleteDB();} else if (type == "open") {myDB.openDB("users", "name", ["name", "age"]);} else if (type == "add") {myDB.insert("users", { name: "整洁", age: 18 });} else if (type == "search") {// let a = await myDB.queryByKey("users", "整洁");// let a = await myDB.queryAll("users");// const range = IDBKeyRange.only(24);// let a = await myDB.queryByCursor("users", "age", range); //查询名字(name)为整洁的数据let a = await myDB.queryByIndex("users", "age", 24);console.log("查找数据", a);} else if (type == "delete") {myDB.delete("users", "整洁");} else if (type == "update") {myDB.update("users", "整洁", { name: "整洁", age: 24 });} else if (type == "close") {myDB.closeDB();}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com