Storage的封装

为什么要封装storage:

  1. Storage本身虽然有Api,但是只是简单的键值对的形式
  2. Storage只能存储字符串,需要人工转换成json对象
  3. 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的形式存储

你可能感兴趣的:(前端开发,Javascript,javascript,前端)