统一接口:storage
- storageImpl:指向现有环境创造类:WeChatStorage/IndexedDBStorage/LocalStorage
- 如果同时支持IndexedDBStorage/LocalStorage,自动选择前者
- 可以强制选择文件系统,LocalStorage/ FileStorage ,后者用于微信环境
- 在文件中实现统一api,示例:
async setItem(key,value) {
if (!this.storageImpl)
throw new Error('No storage implementation available');
return this.storageImpl.setItem(key, value);
}
- 注意:WeChatStorage和IndexedDBStorage有一个重要区别,WeChatStorage没有表(对象存储)的概念。微信小程序的本地存储是一个简单的键值存储系统,每个键只对应一个值。而IndexedDBStorage是一个数据库下存储很多表,每个表相当于一个简单的键值存储系统。
- 现有功能(IndexedDBStorage,所有数据存取在this.storeName表内):
- setItem(key, value):将key对应存储value,
- getItem(key):获得key对应数据
- removeItem(key):清空key对应数据
- clear():清空this.storeName对应表
- getAllItems():获取this.storeName对应表内所有数据
- 现有功能(WeChatStorage):
- setItem(key, value):将key对应存储value,
- getItem(key):获得key对应数据
- removeItem(key):清空key对应数据
- clear():清空本地所有缓存
- getItemById(key, id):key对应数据如果是一个数组,获取数组里对应id的数据
- addItem(key, newItem):key对应数据如果是一个数组,向数组里添加newItem
使用方法:
- 在scrip里:
import Storage from 'path/to/Storage.js'
; - 对于统一接口,直接调用
Storage.XXX
,比如Storage.setItem(key, value)
; - 对于单独接口,调用
Storage.storageImpl.XXX
- 对于强制使用文件系统,调用
Storage.localStorage
或者Storage.FileStorage