/**
|
* vk依赖扩展 - localStorage 本地缓存
|
* pub - 公共的可随时删除的缓存
|
* kh - 跟登录账号有关联的缓存
|
* sys - 系统级缓存 - 一般不删除
|
*
|
* 储存缓存
|
* vk.setStorageSync(key,data);
|
* 获取缓存
|
* vk.getStorageSync(key);
|
*/
|
var localStorage = {};
|
/**
|
* 将 data 存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个同步接口。
|
* @param {String} key 本地缓存中的指定的 key
|
* @param {Any} data 需要存储的内容,只支持原生类型、及能够通过 JSON.stringify 序列化的对象
|
*/
|
localStorage.setStorageSync = function(key,data){
|
uni.setStorageSync(key, data);
|
watchLocalStorage({ type:"set", key, data });
|
};
|
|
/**
|
* 从本地缓存中异步获取指定 key 对应的内容。
|
* @param {String} key 本地缓存中的指定的 key
|
*/
|
localStorage.getStorageSync = function(key){
|
let data = uni.getStorageSync(key);
|
// get 没有必要监听
|
// watchLocalStorage({ type:"get", key, data });
|
return data;
|
};
|
|
/**
|
* 同步获取当前 storage 的相关信息。
|
*/
|
localStorage.getStorageInfoSync = function(){
|
let info = uni.getStorageInfoSync();
|
let sizeInfo = calcSize(Number(info.currentSize), 1024, 3,["KB","MB","GB"]);
|
info.sizeInfo = sizeInfo;
|
return info;
|
};
|
|
/**
|
* 从本地缓存中同步移除指定 key。
|
* @param {String} key 本地缓存中的指定的 key
|
*/
|
localStorage.removeStorageSync = function(key){
|
uni.removeStorageSync(key);
|
watchLocalStorage({ type:"remove", key });
|
};
|
/**
|
* 从本地缓存中异步移除指定 key。
|
*/
|
localStorage.removeStorage = function(obj){
|
uni.removeStorage({
|
key:obj.key,
|
success:function(res){
|
watchLocalStorage({ type:"remove", key:obj.key });
|
if(obj.success) obj.success(res);
|
},
|
fail:obj.fail,
|
complete:obj.complete
|
});
|
};
|
|
/**
|
* 同步清理本地数据缓存。若key有值,则清除键值为指定字符串开头的缓存
|
* @param {String} key 本地缓存中的指定的 key
|
* vk.clearStorageSync();
|
*/
|
localStorage.clearStorageSync = function(key){
|
if(key){
|
let { keys } = uni.getStorageInfoSync();
|
if(keys){
|
keys.map((keyName) => {
|
if(keyName.indexOf(key) == 0){
|
localStorage.removeStorage({
|
key: keyName
|
});
|
}
|
});
|
}
|
}else{
|
watchLocalStorage({ type:"clear" });
|
uni.clearStorage();
|
}
|
};
|
|
export default localStorage;
|
|
|
|
/**
|
* 单位进制换算
|
* length 换算前大小
|
* ary 进制,如KB-MB-GB,进制1024
|
* precision 数值精度
|
* arr 进制的数组,如["B","KB","MB","GB"]
|
* calcSize(length,1024,3,["B","KB","MB","GB"]);
|
*/
|
function calcSize (length=0,ary,precision,arr){
|
var size = parseFloat(length);
|
var mySize = 0;
|
var type = "";
|
if(size<ary || arr.length<=1){
|
type = arr[0];
|
mySize = parseFloat(size.toFixed(precision));
|
}else{
|
for (var i = 1; i < arr.length; i++) {
|
var g = arr[i];
|
size = size/ary;
|
if(size <ary){
|
type = g;
|
mySize = parseFloat(size.toFixed(precision));
|
break;
|
}
|
}
|
}
|
return {
|
size : mySize,
|
type : type,
|
title : mySize + " " + type
|
}
|
};
|
|
function watchLocalStorage(obj){
|
if(typeof localStorage.watch === "function"){
|
localStorage.watch(obj);
|
}
|
}
|
|