//localStorage处理封装,以支持对象的存取
//@author visy.wang
export default {
KEYS:{//保存所有的key,可扩展
TOKEN_ID: "TOKEN_ID",//认证信息
BTN_AUTH: "BTN_AUTH",//页面按钮权限
MENU_LIST: "MENU_LIST",//菜单列表
WAREHOUSE_LIST: "WAREHOUSE_LIST"//仓库列表
},
//添加or修改
set(key,data){
if(data!==null && (typeof data === 'object')){//数组or对象
data = JSON.stringify(data);
}
localStorage.setItem(key,data);
},
//批量添加or修改
setBatch(data,fields){
if(data && data instanceof Object){//data必须是对象
if(fields instanceof Array){//提取字段并保存
for(let name of fields){
if(data[name] === undefined){//提取不到时跳过
continue;
}
this.set(name,data[name]);
}
}else if(fields instanceof Object){//提取字段并指定别名后保存,例子:data={xxx:123}, fields={xxx:"XXX"} 保存结果: XXX:123
for(let name in fields){
if(data[name] === undefined){
continue;
}
this.set((fields[name]+''),data[name]);
}
}else{//fields不是数组或对象时,保存data的所有属性
for(let name in data){
this.set(name,data[name]);
}
}
}
},
//查询
get(key){
const val = localStorage.getItem(key);
if(val===null || val==='null'){
return null;
}else if(val==='undefined'){
return undefined;
}else{
try{
return JSON.parse(val);//解析成功说明是JSON
}catch (e) { //解析失败按原值返回
return val;
}
}
},
//局部修改-目前只支持对象
//修改key对应对象中的部分字段,fields格式: {field1:newVal1,field2:newVal2, ...}
//如果对象不存在,会创建一个key的对象
//field存在则修改,不存在相当于添加了一个新的属性
modify(key,fields){
let obj = this.get(key);
if(obj === null){
obj = {};
}
if(obj instanceof Object && fields){
for(let name in fields){
obj[name] = fields[name];
}
this.set(key,obj);
}
},
//删除
//key:String/Array<String> 传递数组可删除多个
remove(key){
if(key instanceof Array){
for(let k of key){
localStorage.removeItem(k);
}
}else{
localStorage.removeItem(key);
}
}
}
localStorage工具函数-以支持复合数据的存取(对象,数组..)
于 2019-01-17 13:56:11 首次发布