封装storage

454 阅读1分钟

封装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值重新写入
    }
}