以前的文章,整理成MarkDown,方便查看
//localStorage处理封装,以支持对象的存取
//@author visy.wang
export default {
KEYS: {//保存所有的key,可扩展
TOKEN_ID: "TOKEN_ID" //认证信息
},
//添加or修改
set(key, data){
if(data!=null && (typeof data === 'object')){//数组or对象
data = JSON.stringify(data);
}
localStorage.setItem(key, data);
},
//批量添加or修改
//data: Object 数据对象,包含要批量操作的数据
//fields: Array/Object 指定要批量操作的字段名(和data的属性名对应)
//fields为对象时可指定保存别名
//fields不传时保存data的所有属性
setBatch(data, fields){
if(data==null || !(data instanceof Object)){
return; //data必须是对象
}
if(fields instanceof Array){//提取字段并保存
for(let name of fields){
let val = data[name];
val!==undefined && this.set(name, val);
}
}else if(fields instanceof Object){
//提取字段并指定别名后保存,
//例子:data={xxx:123}, fields={xxx:"XXX"} 保存结果: XXX:123
for(let name in fields){
let val = data[name];
val!==undefined && this.set((fields[name]+''), val);
}
}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, ...}
//field存在则修改,不存在相当于添加了一个新的属性
modify(key, fields){
let data = this.get(key);
if(data!=null && data instanceof Object && fields){
for(let name in fields){
data[name] = fields[name];
}
this.set(key, data);
}
},
//删除
//传递需删除的key,可多个
remove(...keys){
for(let key of keys){
localStorage.removeItem(key);
}
}
}