美文网首页前端开发那些事儿
vue中localStorage存储信息的三种方法

vue中localStorage存储信息的三种方法

作者: web30 | 来源:发表于2020-07-16 11:12 被阅读0次

前端使用localStorage、sessionStorage存储方法大家都不陌生了,今天主要记录下localStorage在vue项目中的存储使用方法。

  • 区别:
    localStorage是本地存储,永久保存,除非主动删除;sessionStorage是会话存储,临时保存,并且它们只能存储字符串类型,对于复杂的对象可以使用JSON.stringify和JSON.parse来处理。
  • 应用场景:
    localStorage、sessionStorage主要用于不同页面之间的传值
  • 存储有效时间:
    当刷新页面(指F5刷新,属于清除内存了)时,vuex存储的值会丢失,sessionStorage页面关闭后就清除了,localStorage不会,除非主动删除,所以我们需要根据的不同的需求决定是采用LocalStorage,还是SessionStorage保存数据。
  • 注:很多人误认为localStorage可以代替vuex,对于不变的数据确实可以,但是当两个组件共用一个数据源(对象或数组)时,如果其中一个组件改变了该数据源,希望另一个级件响应该变化时,localStorage、sessionStorage无法做到,原因就是在于它们的区别。
第一种:
返回json格式

直接从后台返回的对象中获取键值,这样最方便快捷,在调用时可直接调用,但当项目中定义的字符串变理太多时,容易混乱

loginClick() {
      var param = {
        UserName: this.form.username,
        UserPwd: this.form.password,
      };
      apiGetLogin(qs.stringify(param)).then( (response) => {
        if (response.data.Code == 200) {
         //存储用户信息
         var hrCompanyId = response.data.Result.hrCompanyId;
         window.localStorage.setItem('hrCompanyId',hrCompanyId);

         var staffid = response.data.Result.staffid;
         window.localStorage.setItem('staffid',staffid);

          this.$router.push({ name: 'Home' });
          this.$message.success('登录成功');
        } else {
          this.$message.error(response.data.Message);
        }
      })
    }
//在调用时可直接调用
var params = {
  staffId: window.localStorage.getItem('staffid')
};
第二种:

结合第一种,第二种保存返回的整个对象,不需要把整个对象里的每个值都拿出来保存一次

loginClick() {
      var param = {
        UserName: this.form.username,
        UserPwd: this.form.password,
      };
      apiGetLogin(qs.stringify(param)).then( (response) => {
        if (response.data.Code == 200) {
         //存储用户信息
         var userInfo = response.data.Result;
         //把返回的对象转换为字符串,因为localstore是以字符串存文件的,直接存个对象识别不了,所以要先把对象转成json字符串
         window.localStorage.setItem('result',JSON.stringify(userInfo));

          this.$router.push({ name: 'Home' });
          this.$message.success('登录成功');
        } else {
          this.$message.error(response.data.Message);
        }
      })
    }
//获取的时候,要先获取json字符串,再parse成json对象
var uInfo = JSON.parse(window.localStorage.getItem('userInfo'));
var useToken = uInfo.token;
第三种:

与第二种的区别在于自己构建了一个json,其它使用方法一样,虽然有点麻烦,但能方便快速取键值

loginClick() {
      var param = {
        UserName: this.form.username,
        UserPwd: this.form.password,
      };
      apiGetLogin(qs.stringify(param)).then( (response) => {
        if (response.data.Code == 200) {
         //存储用户信息
         var result = response.data.Result;
          //方便快速取值
          var userInfo = {
            staffid: result.staffid,
            hrCompanyId: result.hrCompanyId,
            token: result.token,
          };
         //把返回的对象转换为字符串,因为localstore是以字符串存文件的,直接存个对象识别不了,所以要先把对象转成json字符串
         window.localStorage.setItem('userInfo',JSON.stringify(userInfo));

          this.$router.push({ name: 'Home' });
          this.$message.success('登录成功');
        } else {
          this.$message.error(response.data.Message);
        }
      })
    }
//获取的时候,要先获取json字符串,再parse成json对象
var uInfo = JSON.parse(window.localStorage.getItem('userInfo'));
var useToken = uInfo.token;
往数组里push字符:

因为localStorage中只接收字符串,所以往数组里push时,也要转换。

// 往数组里存储时,也要转换为字符串
 historyCityList = [];

//存储时转换为字符串存储,不然存储进去它会改变你原始定义的类型,把数组改变为对象object
 window.localStorage.setItem("historyCityList",JSON.stringify(this.historyCityList))

//获取时用再转换为数组显示
 this.historyCityList = JSON.parse(window.localStorage.getItem("historyCityList"));
存储时没转换改变原始定义类型

最后,sessionStorage的使用跟localStorage一样,只要把上面的localStore换成sessionStorage就可以。需要注意的是,如果我们数据是保存到sessionStorage中的,那只能通过sessionStorage获取;如果我们数据是存到localStorage,那就只能通过localStorage获取。

相关文章

网友评论

    本文标题:vue中localStorage存储信息的三种方法

    本文链接:https://www.haomeiwen.com/subject/bdhacktx.html