簡單介紹下localForage。localForage 是一個 JavaScript 庫,通過簡單類似 localStorage API 的非同步儲存來改進你的 Web 應用程式的離線體驗。它能儲存多種型別的資料,而不僅僅是字串。 內部有一個優雅降級策略。
預設情況下,localForage 按照以下順序選擇資料倉儲的後端驅動:
IndexedDB
WebSQL
localStorage
扯遠了。那麼言歸正傳。localForage這個庫可以說功能很強大也很齊全了。但是對於indexedDB這個資料倉儲。localForage卻沒有支援給表加索引,通過索引查詢資料的支援。可是我就想用怎麼辦。
方案一:有個基於localForage的庫叫localforage-indexes,這個庫可以給表加索引。但是!!!!
簡單來說,會衝突,而且createIndex的時候,如果已經建立會報錯。程式無法正常執行了。那麼其實
這就是它為什麼github只有1星的原因了。完全沒法用是不是。
我的解決方案是。原生建立indexedDB索引+localForage。
show code 首先是用原生初始化給需要的表加上索引
// 春風得意馬蹄疾,一日看盡長安花。 // 〔唐〕孟郊《登科後》 //程式碼作者:xbw let dbVersion = 1.0, store = "project" //建立個物件,到時候建立索引直接迴圈一起建立了。 let projectIndexObj = {} projectIndexObj["stroeNmae1"] = [{ indexName: "id", unique: false }]; projectIndexObj["stroeNmae2"] = [{ indexName: "id", unique: false }]; projectIndexObj["stroeNmae3"] = [{ indexName: "name", unique: false }]; var openRequest = indexedDB.open(store, dbVersion); openRequest.onupgradeneeded = function (e) { let db = e.target.result; for (let key in projectIndexObj) { if (!db.objectStoreNames.contains(key)) { var store = db.createObjectStore(key); //建立索引 projectIndexObj[key].forEach(item => { store.createIndex("ix_" + item.indexName, item.indexName, { unique: item.unique }); }) } } //建立完畢後,把db關掉,不然後面用localForage會出問題。 db.close(); };
到這步,初始化的索引我們就加完了,也不會影響localForage的使用。現在就是取資料了。
封裝一個通過索引取值的方法就可以了。
順便給大家推薦一個個人覺得比較好用的介面管理工具,apipost,可以完美替代postman。