Storage(本地存储机制),vue中localStorage的封装

// storage.js
/**
 * Storage封装
 * {"user":{"userName":"jack","age":"30","sex":"1"}}
 */
const STORAGE_KEY = 'userData' // 存储的键名
export default {
  /*
   * @param {string} key - 键名:userName
   * @param {any} value - 键值:jack
   * @param {string} [moduleName] - 模块名,可选:user
   */

    // 设置值
  setItem (key, value, moduleName) {
    if (moduleName) {
      // 递归获取指定模块的当前状态
      const val = this.getItem(moduleName)
      // 更新状态
      val[key] = value
      // 再次递归存储更新后的状态
      this.setItem(moduleName, val)
    } else {
      // 获取整个存储状态
      const val = this.getStorage()
      // 更新状态
      val[key] = value
      // 将更新后的状态存储到会话存储中
      window.sessionStorage.setItem(STORAGE_KEY, JSON.stringify(val))
    }
  },
    // 获取值
  getItem (key, moduleName) {
    // 如果提供了模块名称,则尝试从模块中获取值
    if (moduleName) {
      // 先获取整个模块的值,obj对象存储在val中
      const val = this.getItem(moduleName) // 递归获取对象
      // 如果模块的值存在,则尝试返回该模块中与key关联的值
      if (val) return val[key]
    }
    // 如果没有提供模块名称,或者从模块中未获取到值,则直接从存储中尝试获取与键关联的值
    return this.getStorage()[key]
  },
    // 获取所有存储的数据
    getStorage () {
      // 从sessionStorage中获取存储的数据,如果没有找到指定键名的数据,则返回一个空对象,转成json返回
      return JSON.parse(window.sessionStorage.getItem(STORAGE_KEY) || '{}')
    },
    // 清除指定的值
  clear (key, moduleName) {
    // 获取所有存储的数据
    const val = this.getStorage()  
    // 如果提供了模块名
    if (moduleName) {
      // 检查该模块是否存在
      if (!val[moduleName]) return
      // 在指定模块中删除键
      delete val[moduleName][key]
    } else {
      // 直接在顶层存储中删除键
      delete val[key]
    }  
    // 更新存储,将修改后的值放回sessionStorage
    window.sessionStorage.setItem(STORAGE_KEY, JSON.stringify(val))
  }
}

// App.vue
<script>
import storage from '@/storage'
export default {
  name: 'App',
  mounted () {
    //storage.setItem('user', { name: 'admin' })
    //storage.setItem('jack', { age: '30' }, 'user')    
    //storage.setItem('sex', 2, 'user')
    storage.clear('sex', 'user')
  }
}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值