封装storage:
- Storage本身的API,只有简单的key/value形式
- Storage只存储字符串,需要转换成JSON对象
- Storage只能一次性清空,不能单独清空
const STORAGE_KEY = 'mall';//mall是在session storage中自定义的
export default {
//设置storage属性
setItem(key, value, module_name) {
if (module_name) {
let val = this.getItem(module_name);
val[key] = value;
this.setItem(module_name, val)
} else {//设置不带模块的,mall下的user
let val = this.getStorage(); //先获取值
val[key] = value; //再存值
window.sessionStorage.setItem(STORAGE_KEY, val) //重新写入storage中
}
},
// 获取某一个模块下面的属性
getItem(key, module_name) { //名字模块,key>modules_name
if (module_name) { //如果名字模块存在
let val = this.getItem(module_name); //跟之前获取整个模块信息一样,只不过这次是获取一个模块的name,递归获取
if (val) return val[key]
}
return this.getStorage()[key]; //先拿到整个storage信息,在根据key拿到mall下的user,再用module_name拿到user下的具体值
},
//获取整个storage信息
getStorage() {
return JSON.parse(window.sessionStorage.getItem(STORAGE_KEY) || '{}');
//key取不到就{},JSON.parse可以将服务端获取的JSON对象转换成对象
},
//清除指定的storage信息
clear(key,module_name){
let val = this.getStorage();
if(module_name){
delete val[module_name][key];//有name模板删除name模板下的key
}else{
delete val[key];//没有name模板直接删除key
}
this.setItem(val);//将删除后的val值重新写入
}
}