前言:
前面说了一下路由的封装,主要是页面的访问,和路径,接下来说一下storage封装,顾名思义名字就已经告诉我们大概意思了,针对数据封装,storage和cookie localstorage sessionstorage的区别 还有本身vue不是提供storage api了吗为什么还要封装。

三者的区别:
存储大小:cookie 4k storage 5M
有效期:cookie拥有有效期 stirage永久存储
cookie会发送到服务端 存储在内存中 storage只存储在浏览器端
路径:cookie有路径限制 torage只存储在域名下
api:cookie没有特定的api storage有对应的api

为什么要封装storage?
storage本身有api,但是只是简单的key/value形式
storage只存储字符串,需要人工转换成json对象
storage只能一次性清空,不能单个清空

示例代码完成封装:

// 封装storge
const STORAGE_KEY = "minmall";

export default{
    //存储值
    //示例:('a',123)无module_name
    //示例2:('a',123,"b")有module_name
    setItem(key,value,module_name){
        //判断module是否有值
        if(module_name){
           let val = this.getStorage(); //获取Storage对象minmall下的模块
           val[key] = value; //key就是需要传入的key value就是需要传入的值 minmall:对象{"a":123}
           this.setItem(module_name,val); //把传入的key和value重新写入 minmall:{"b"{"a":123}}
        }else{
            let val = this.getStorage();//获取Storage对象minmall下的模块
            val[key] = value; //key就是需要传入的key value就是需要传入的值 minmall:对象{"a":123}
            window.sessionStorage.setItem(STORAGE_KEY,JSON.stringify(val)); //把传入的key和value重新写入 minmall:{"a":123}
        }
    },
    //获取值,只需要传入key
    //示例:('a')无module_name
    //示例2:('a',"b")有module_name
    getItem(key,module_name){
        //调用getStorage方法获取到storage json对象
        if (module_name){
            let val = this.getItem(module_name); //获取Storage对象minmall下的模块['b']
            if(val) return val[key] //b:{'a'}
            }
        return this.getStorage()[key] //获取Storage对象minmall下的模块['a']:json对象
    },

    //获取storage
    getStorage(){
       return JSON.parse(window.sessionStorage.getItem(STORAGE_KEY) || '{}'); 
    },
    //清空值,只需要传入key
     //示例:('a')无module_name
     //示例2:('a',"b")有module_name
    clearItem(key,module_name){
        let val = this.getStorage();  //获取Storage对象minmall下的模块
        if(module_name){
            delete val[module_name][key]; //minmall下的模块{"a":{"b"}}
        }else{
            delete val[key] //minmall下的模块{"a"}
        }
       window.sessionStorage.setItem(STORAGE_KEY,JSON.stringify(val)); //调用对象的方法传入minmall:{'a'}
    }
}

app.vue中写入:

<script>
import storage from './storage/storage' //导入模块
export default {
  name:'app',
  components:{
    
  },
  mounted(){ //请求
    //storage.setItem("liu",789) //封装的方法
    //storage.getItem('liu')
    storage.clearItem('liu')
  },
}
</script>

结果:
D1MCBV6R0Q6BEQ{TJ)1RBDS.png

@}$NJ$QZM(HB6G}FZ38}HRD.png

0%06YXLX_7}2)$I4B4NUO@1.png

总结:
自己封装storage可以有助我们自定义storage方法,实现的过程我们也可以了解,并且不会受api约束,同样一些场景我们也可以考虑的比较全面,storage在游览器中存储建议是一个key对应一个json对象对象中可以写入很多值,这样我们只需要获取到一个key就可以操作里面的对象.

最后修改:2021 年 03 月 22 日 11 : 08 PM
感谢您的,打赏!