zoukankan      html  css  js  c++  java
  • vue——页面刷新数据丢失问题

    参考: https://blog.csdn.net/aliven1/article/details/80743470
              https://blog.csdn.net/liang377122210/article/details/78880438
              https://blog.csdn.net/goodaxuan/article/details/82113123

    我的需求: 进入商城后调接口获取用户id,并把id存入session中。之后跳转页面或刷新页面时,直接从session中取出id,无需再调接口。

    main.js文件中:

    import Vue from 'vue';
    import App from './App';
    import router from './router';
    import Vuex from 'vuex';
    ···
    import store from './store'; //vuex部分
    
    Vue.prototype.$http = axios;
    axios.defaults.baseURL = '***';
    axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
    
    Vue.prototype.userInfo = function(succallback, failcallback) {
      var _this = this;
      if (_this.userId) {
        succallback && succallback(_this.userInfo);
        return;
      }
      if (sessionStorage.getItem("userMsg")) {
        let t = sessionStorage.getItem("userMsg"),
          obj = JSON.parse(t),
          userMsg = obj.userMsg;
        _this.uMID = userMsg.uMID;
        _this.userInfo = {
          'uMID': userMsg.uMID
        };
        succallback && succallback(_this.userInfo);
      } else {
        _this.$http.get('***').then(function(res) {
            if (res.status === 200 && res.data.result === "0") {
              var data = res.data.message;
              _this.userInfo = {
                'uMID': data.uMID
              };
              _this.uMid = data.uMID;
              _this.$store.commit('set_userMsg', data);
              sessionStorage.setItem("userMsg", JSON.stringify(_this.$store.state));
              //在页面加载时读取sessionStorage里的状态信息
              if (sessionStorage.getItem("userMsg")) {
                _this.$store.replaceState(Object.assign({}, _this.$store.state, JSON.parse(sessionStorage.getItem(
                  "userMsg"))));
              }
              //在页面刷新时将vuex里的信息保存到sessionStorage里
              window.addEventListener("beforeunload", () => {
                sessionStorage.setItem("userMsg", JSON.stringify(_this.$store.state))
              })
              succallback && succallback(_this.userInfo);
            }
          })
          .catch(function(error) {
            console.log(error);
            failcallback && failcallback(error);
          });
      }
    };
    
    new Vue({
      el: '#app',
      router,
      store,
      data() {
        return {
          uMID: ''
        }
      },
      components: {
        App
      },
      template: '<App/>'
    })

    store.js:

    import Vue from "vue";
    import Vuex from "vuex";
    
    Vue.use(Vuex);
    
    export default new Vuex.Store({
      state: {
        userMsg: '',
        userId: ''
      },
      getters: {
        userId: state => state.userId
      },
      mutations: {
        changeUserId(state, userId) {
          state.userId = userId;
        },
        set_userMsg(state, data) {
          state.userMsg = data
        }
      },
      actions: {},
      modules: {}
    });

    组件中:

    ···
    data() {
          return {
            uMID: ''
          }
    },
    created() {
          let _this = this;
          _this.getUser();
    },
     methods: {
          getUser: function() {
            let _this = this;
            _this.userInfo(function(userId) {
              _this.uMID = userId.uMID;
              ···  //需要uMID的操作最好在这里进行
            });
          }
    }
    ···
  • 相关阅读:
    转: wireshark过滤规则
    PHP开发
    转:python安装pycrypto
    How to use pycharm to debug scrapy projects
    VCForPython27.msi安装后, 还显示error: Unable to find vcvarsall.bat
    Dcgpofix
    Dsamain
    组托管服务帐户概述
    创建 PSO
    介绍 Active Directory 域服务 (AD DS) 虚拟化
  • 原文地址:https://www.cnblogs.com/linjiangxian/p/11454724.html
Copyright © 2011-2022 走看看