为什么要封装storage:
- Storage本身虽然有Api,但是只是简单的键值对的形式
- Storage只能存储字符串,需要人工转换成json对象
- Storage只能一次性清空,不能单个清空
我们通常在Storage中存储json对象,因此我们需要自己封装Storage方法。
/*
Storage封装
*/
const STORAGE_KEY = 'mall';
export default {
// 存储值
setItem(key, value, modules_name) {
if (modules_name) {
var all = this.getItem(modules_name)
all[key] = value;
// 这里递归本方法将modules_name作为key(已有),再将当前添加进去的all放进此module_name中,此时的val就包含了所有值,最后直接添加即可
this.setItem(modules_name, all)
} else {
//只传入两个参数:
let val = this.getStorage();
console.log(val);
val[key] = value;
window.sessionStorage.setItem(STORAGE_KEY, JSON.stringify(val));
}
},
/*
获取值(可以传入一个值也可传入两个值)
一个参数:没有moudle直接单对象
一个参数:获得moudle下的key对应的对象
*/
getItem(key, modules_name) {
if (modules_name) {
let val = this.getItem(modules_name);
if (val) return val[key]
}
return this.getStorage()[key];
},
// 获取整个数据(转为json格式):将数据转换为json格式。
getStorage() {
return JSON.parse(window.sessionStorage.getItem(STORAGE_KEY) || '{}')
},
// 删除某一个值
clear(key, modules_name) {
let val = this.getStorage();
if (modules_name) {
delete val[modules_name][key]
} else {
delete val[key]
}
window.sessionStorage.setItem(STORAGE_KEY, JSON.stringify(val));
}
}
使用方法:
// console.log(storage.getStorage());
// storage.setItem('a',1);
// storage.setItem('address','北京','person');
// storage.setItem('abc',{data:88},'person');
storage.clear('a')
这样我们可以将整个项目中使用的storage全部放在一个key/value中,在value中存放所有的data,使用json的形式存储