Vue 使用windows 特性之localStorage解析

符号 阅读:580 2021-03-31 13:25:49 评论:0

localStorage简介

在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage大小会有所不同。

localStorage特征

  • 生命周期是永久的,但是数据实际是存在浏览器的文件夹下,可能卸载浏览器就会删除。
  • 兼容IE8以上浏览器。
  • 有长度限制,5M左右,不同浏览器大小会有不同。
  • 只能存储字符串类型,需要转成字符串存储。(重点:JSON.parse()作用是将字符串转化成引用类型(对象),JSON.stringfy()作用是将引用类型(对象)转换成字符串)如果是基本类型,自动会转换为字符串类型

localStorage基本用法

  • 判断浏览器是否支持localStorage属性
if(!window.localStorage){ 
	alert("浏览器不支持localstorage"); 
    return false; 
} 
else{ 
     //逻辑业务 
 }
  • localStorage存值和取值:localStorage相当于window对象的一个属性,所以拥有[]和.方式调用,localStorage自身的setItem方法(存值)和getItem方法(取值)
var storage=window.localStorage;             
    storage["a"]=1;   //写入a字段           
    storage.b=1;   //写入b字段            
    storage.setItem("c",3);   //写入c字段 
             
    localStorage.getItem("name"); // 自身方法取值 
    localStorage["name"];// []方法取值 
	localStorage.name; // .方法取值 
 
    console.log(typeof storage["a"]); 
    console.log(typeof storage["b"]); 
    console.log(typeof storage["c"]);
  • localStorage修改值和删除值:修改值就是相当于给对应的key重新赋值,就会把原来的值覆盖掉,删除值可以通过对象删除属性的关键字delete,也可以用自身的方法removeItem
//修改值 
localStorage.setItem("name","TOM");// 自身方法 
localStorage["name"]="TOM";// []方法 
localStorage.name="TOM";// .方法 
//删除值 
localStorage.removeItem("name"); 
delete localStorage["name"]; 
delete localStorage.name
  • localStorage遍历所有的key和值
// 通过使用key()方法,向其中出入索引即可获取对应的键 
for (var i=0;i<localStorage.length;i++) { 
    console.log(localStorage.key(i)); 
} 
// 通过for in 循环获取 
for(var key in localStorage){ 
    console.log(key); 
} 
localStorage.valueOf();//取出所有的值 
localStorage.clear();//清除所有的值
  • localStorage判断是否具有某个key,用hasOwnProperty方法
localStorage.hasOwnProperty("name");  // 如果存在的话返回true,不存在返回false
  • localStorage储存字符串类型数据:可以使用JSON.stringify()这个方法,来将JSON转换成为JSON字符串;读取之后将JSON字符串转换成为JSON对象,使用JSON.parse()方法
var jsonObj={ 
    name:'zhangsan', 
    sex:'man', 
    age:24 
};//定义json类型数据 
var storage = window.localStorage; 
var jsonStr = JSON.stringify(jsonObj);//把json类型数据转换为json字符串 
storage.setItem('zhangSanData',jsonStr); 
console.log(tepeof storage.zhangSanData);//string 
 
var jsonStrx = storage.zhangSanData; 
var jsonObjx = JSON.parse(jsonStrx);/把json字符串装换为json对象 
console.log(jsonObjx);

Vue + localStorage实战运用:购物车增减删物品

let store=new Vuex.Store({ 
  
     state: { 
        cartarry:JSON.parse(localStorage.getItem('cartarry')) || [],//存储购物车商品的数组 
      }, 
  
    mutations: { 
  
        //添加商品到购物车 
        tocart(state,tag){ 
          let goods=state.cartarry.find(v=>v.title==tag.label) 
          if(goods){ 
            goods.cartCount+=1 
          }else{ 
            state.cartarry.push({title:tag.label,cartCount:1}) 
          } 
        }, 
        //购物车商品数量加一 
        cartadd(state,index){ 
          state.cartarry[index].cartCount++ 
        }, 
        //购物车商品数量减一 
        cartremove(state,index){ 
          if(state.cartarry[index].cartCount>1){ 
            state.cartarry[index].cartCount-- 
          }else{ 
            if(window.confirm('确定从购物车移除商品吗?')){ 
              state.cartarry.splice(index,1) 
            } 
          } 
        }, 
        //清空购物车 
        clearcart(state){ 
          state.cartarry=[] 
        } 
    }, 
     //相当于我们vue 计算属性 
      getters:{ 
          countsum:state=>{ 
            let num=0 
            state.cartarry.forEach(v=>{ 
              num+=v.cartCount 
            }) 
            return num 
          } 
  }, 
  
  
  
}) 
  
//监听每次调用mutations的时候,都会进这个方法,然后我们可以做一些自己想做的处理 
store.subscribe((mutations,state)=>{ 
  localStorage.setItem('cartarry',JSON.stringify(state.cartarry)) 
}) 
  
export default store

 

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

全民解析

全民解析

关注我们