日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

indexedDB简易封装

發(fā)布時(shí)間:2023/12/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 indexedDB简易封装 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

初學(xué)的時(shí)候?qū)懙膁emo,實(shí)際工作使用LOCALFORAGE庫即可。

/* indexedDB:講道理是用在離線狀態(tài)下儲(chǔ)存大量的結(jié)構(gòu)化數(shù)據(jù)操作風(fēng)格就跟axios一樣,是請(qǐng)求相比于cookie,這個(gè)的優(yōu)勢在于持久化,安全,不會(huì)占用帶寬,而一般只是少量數(shù)據(jù)存儲(chǔ)的話還是用cookie比較方便的封裝優(yōu)化待做:1:配置參數(shù)過多,應(yīng)該拆分函數(shù)返回,例如openDB().add(),openDB().get()這樣2:儲(chǔ)存的數(shù)據(jù)應(yīng)當(dāng)默認(rèn)為數(shù)組類型,自動(dòng)去多次儲(chǔ)存,避免多次手動(dòng)調(diào)用(原因:IndexedDB每次只能存儲(chǔ)一條)已考慮問題:1、版本問題:版本更新應(yīng)該清空數(shù)據(jù)庫-然后重建-當(dāng)然不需要考慮也是可行的若不考慮版本號(hào),那么onupgradeneeded只會(huì)在創(chuàng)建數(shù)據(jù)庫時(shí)觸發(fā),此后不再觸發(fā)2、代碼層次不考慮修改數(shù)據(jù)庫結(jié)構(gòu)-不用考慮*/ export default {tar: 123,// 初始化數(shù)據(jù)倉庫initDB (init) {console.log(this)/* 數(shù)據(jù)庫名-版本號(hào)-表-自定義索引[數(shù)組]-主鍵[默認(rèn)id] 版本號(hào)一般是資訊那種版本,發(fā)生版本號(hào)更新時(shí),應(yīng)該清除數(shù)據(jù)庫indexOptions = [{ name: 'name', unique: false},{ name: 'age', unique: true}]不允許 name值重復(fù)(重復(fù)會(huì)報(bào)錯(cuò)) unique 表示唯一性,重復(fù)的屬性不會(huì)被存入*/const { DB, version, form, indexOptions, keyPath = 'id' } = init// 檢查兼容性const indexedDB = window.indexedDB ||window.webkitIndexedDB ||window.mozIndexedDB ||window.msIndexedDBif (!indexedDB) {alert('你的瀏覽器不支持IndexedDB')return}// 打開一個(gè)數(shù)據(jù)庫// 若要修改數(shù)據(jù)庫結(jié)構(gòu),必須觸發(fā)onupgradeneeded去修改const request = indexedDB.open(DB, version)// open一個(gè)不存在的數(shù)據(jù)庫會(huì)觸發(fā)// open一個(gè)超前版本會(huì)觸發(fā)request.onupgradeneeded = function (event) { // event包含了新舊版本號(hào),console查看let db = event.target.resultlet objectStoreif (!db.objectStoreNames.contains(form)) { // 檢查是否存在-表objectStore = db.createObjectStore(form, { keyPath: keyPath }) // 設(shè)置默認(rèn)的主鍵為id,[數(shù)據(jù)必須擁有該屬性]}if (indexOptions || indexOptions.length > 0) {indexOptions.map((item) => {objectStore.createIndex(item.name, item.name, { unique: item.unique })})}}// 發(fā)生版本更新時(shí),由于自定義的索引會(huì)重復(fù)添加,報(bào)錯(cuò),觸發(fā)onerrorrequest.onerror = (e) => {indexedDB.deleteDatabase(DB) // 刪除數(shù)據(jù)庫alert('版本更新,重置數(shù)據(jù)庫,即將刷新頁面') // 關(guān)閉警告框后進(jìn)行頁面刷新location.reload()}return {// 添加// 注意:如果傳入的數(shù)據(jù)中,含有已存在的主鍵,則該次添加數(shù)據(jù)失敗add (data) {// 考慮傳入數(shù)據(jù)數(shù)組的情況if (data instanceof Array) {request.onsuccess = (event) => {const db = event.target.resultfor (let i = 0; i < data.length; i++) {db.transaction(form, 'readwrite').objectStore(form).add(data[i])}}} else { // 傳入單個(gè)數(shù)據(jù)request.onsuccess = (event) => {const db = event.target.resultdb.transaction(form, 'readwrite').objectStore(form).add(data)}}},// 更新// 更新功能完全可以替代addput (data) {// 考慮傳入數(shù)據(jù)數(shù)組的情況if (data instanceof Array) {request.onsuccess = (event) => {const db = event.target.resultfor (let i = 0; i < data.length; i++) {db.transaction(form, 'readwrite').objectStore(form).put(data[i])}}} else { // 傳入單個(gè)數(shù)據(jù)request.onsuccess = (event) => {const db = event.target.resultdb.transaction(form, 'readwrite').objectStore(form).put(data)}}},// 刪除del (index) {// 考慮傳入數(shù)據(jù)數(shù)組的情況if (index instanceof Array) {request.onsuccess = (event) => {const db = event.target.resultfor (let i = 0; i < index.length; i++) {console.log(i)db.transaction(form, 'readwrite').objectStore(form).delete(index[i])}}} else { // 傳入單個(gè)數(shù)據(jù)request.onsuccess = (event) => {const db = event.target.resultdb.transaction(form, 'readwrite').objectStore(form).delete(index)}}},// 根據(jù)主鍵獲取數(shù)據(jù)get (index, callBack) {request.onsuccess = (event) => {const db = event.target.resultdb.transaction(form, 'readwrite').objectStore(form).get(index).onsuccess = (res) => {console.log(res)if (callBack) {callBack(res)}}}},// 根據(jù)自定義索引獲取// 始終返回一條數(shù)據(jù),即使索引對(duì)應(yīng)的值有多個(gè)index (name, index, callBack) {request.onsuccess = (event) => {const db = event.target.resultdb.transaction(form, 'readwrite').objectStore(form).index(name).get(index).onsuccess = (res) => {console.log(res)if (callBack) {callBack(res)}}}},// 遍歷each (index) {request.onsuccess = (event) => {const db = event.target.resultdb.transaction(form, 'readwrite').objectStore(form).openCursor().onsuccess = (event) => { // openCursor創(chuàng)建游標(biāo)-指向第一項(xiàng)var cursor = event.target.resultif (cursor && !(index && cursor.primaryKey >= index)) { // 必須判斷時(shí)候存在,否則會(huì)多運(yùn)行一次cursor.continue(3) // 游標(biāo)繼續(xù)往下 搜索,重復(fù)觸發(fā) onsuccess方法,如果到最后返回nul,指定參數(shù)則跳到對(duì)飲的indexconsole.log(cursor) // direction、key、primaryKey、source、value// cursor.delete() // 刪除當(dāng)前游標(biāo)下的數(shù)據(jù)-游標(biāo)位置不變// cursor.update(obj) // 使用obj更新數(shù)據(jù)if (cursor.key === 2) {console.log(cursor)}}}}}}}, }

總結(jié)

以上是生活随笔為你收集整理的indexedDB简易封装的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91极品蜜桃臀 | 亚洲欧美精品 | 欧美激情视频网址 | 成人看片免费 | 黑人性生活视频 | 九九色精品 | 日本老小玩hd老少配 | 久久草av| 色老头一区二区三区在线观看 | 97超碰碰 | 国产视频一 | 亚洲av无码国产精品色午夜 | 欧美一级做a爰片久久高潮 久热国产精品视频 | 日韩在线欧美 | 国产精品天美传媒入口 | 狠狠躁夜夜躁人人爽天天高潮 | 在线视频二区 | 亚洲第一综合 | 亚洲天堂视频在线播放 | 悠悠色影院 | 日韩一区免费视频 | 西西444www无码大胆 | 日本国产欧美 | 色网址在线观看 | 久久99色| 久久久免费高清视频 | 欧洲精品久久久 | 不卡一区二区在线 | 日韩不卡| 亚洲色图3p | 国产免费一区二区三区免费视频 | 国产精品无码免费在线观看 | 亚洲超碰在线观看 | 国产精品久久久久久久蜜臀 | 日韩在线不卡 | 日日操日日干 | 青青草原av在线 | 日本最新中文字幕 | 人人干天天干 | 欧美视频xxxx| 国产精品丝袜在线 | 超碰2025 | 欧美一级淫片007 | 亚洲图片综合区 | 小镇姑娘国语版在线观看免费 | 毛片女人 | 性激烈视频在线观看 | 女人的天堂网站 | 日韩成人在线观看 | 欧美丰满老熟妇aaaa片 | 小视频在线免费观看 | 91大片免费看 | 天天艹天天 | 国产成人精品一区二区三区在线 | 国产黄色片免费看 | 韩国美女一区二区 | 美女露胸露尿口 | 波多野结衣国产 | 五月婷婷六月香 | 成人久久一区二区 | 黄色大尺度视频 | 女生喷水视频 | 边啃奶头边躁狠狠躁 | 国产精品久久久久免费 | 波多野结衣一区 | 国产精品久久久久久久久久 | 国产91精选| 捆绑调教在线观看 | 日韩精品一区二区三区中文在线 | 高清亚洲| 亚洲大胆视频 | 手机看片一区二区三区 | a在线看 | 欧美精品免费在线 | 九色视频偷拍少妇的秘密 | 一区二区久久精品66国产精品 | 性欢交69精品久久久 | 中文精品久久久久人妻不卡 | 国产乱码久久久久久 | 成人午夜激情视频 | 日韩在线视频网址 | 九九九国产 | 九九热精品在线观看 | 久久久久久久国产精品 | 96免费视频| 奇米影视色 | 国产污在线观看 | 国产成人精品一区二区三区免费 | 久久午夜无码鲁丝片 | 久久久久亚洲精品中文字幕 | 精品国产欧美 | 爱爱视频欧美 | www亚洲视频 | 亚洲欧美日韩一区在线观看 | 日韩成人高清在线 | 久久精品一二三区 | 视频一区二区在线播放 | 美女一区二区三区 | 曰本无码人妻丰满熟妇啪啪 |