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的操作最好在这里进行
});
}
}
···
vue页面刷新数据丢失问题的更多相关文章
- URL不变的情况下,最实用的vue刷新当前页面,provide / inject 组合 方式实现vue页面刷新
原文:https://blog.csdn.net/Dream_xun/article/details/83024487 其他参考:https://blog.csdn.net/liyunkun888/a ...
- vue传参页面刷新数据丢失问题
在做vue的时候,经常会遇到组件之间数据的传递问题,通过params或者query传参,但是,当页面刷新的时候,数据会丢失,找不到数据.今天经过总结,解决了这个问题.通过了一下几种情况进行传值: 通过 ...
- npm安装vuex及防止页面刷新数据丢失
npm install vuex 在项目scr目录下新建store文件夹,在store文件夹下新建index.js文件. import Vue from 'vue'; import Vuex from ...
- vuex页面刷新数据丢失的解决办法
在vue项目中用vuex来做全局的状态管理, 发现当刷新网页后,保存在vuex实例store里的数据会丢失. 原因: 因为store里的数据是保存在运行内存中的,当页面刷新时,页面会重新加载vue实例 ...
- 结合sessionStorage解决vuex页面刷新数据丢失的问题
将需要保存在vuex中的数据同时保存在sessionStorage中即可: import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); ...
- vue:vue页面刷新vuex数据消失问题
vuex中数据刷新页面消失问题:a页面请求的数据保存在vuex中,只要不刷新,那跳转到b页面里也可以用,但如果b页面刷新,那vuex里的数据就会消失,可以得解决方法:a页面用的数据a页面的生命周期函数 ...
- VUE页面刷新问题
1). location方式 location.reload() 缺点:刷新页面,卡白 2). router方式 this.$router.go(0) 缺点:同一问题,比一好点 3). provide ...
- 解决vue页面刷新或者后退参数丢失的问题
原文链接: 点我 在商城类的项目中,会经常遇到列表数据筛选查询的情景,当要打开某一项的详情页或者暂时离开列表页,再返回(后退时),选择的筛选条件会全部丢失,辛辛苦苦选择好的条件全没了,还得重新选择,如 ...
- vue页面刷新重定向
在App.vue中,添加如下代码: created(){ if(this.$router.path !== '/RealTimeMonitoring'){ this.$router.replace(' ...
随机推荐
- python包的安装
Microsoft Windows [版本 10.0.17134.228] (c) 2018 Microsoft Corporation.保留所有权利. C:\Users\Administrator& ...
- Leetcode211. Add and Search Word - Data structure design 添加与搜索单词 - 数据结构设计
设计一个支持以下两种操作的数据结构: void addWord(word) bool search(word) search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a- ...
- 从服务器上下载下来的代码,部署到本地时,Url自动带www前缀
fix步骤: 1.网站根目录下,找到.htacess文件,有记事本打开 2.定位到 RewriteCond %{HTTP_HOST} . RewriteCond %{HTTP_HOST} !^www\ ...
- CSIC_716_20191111【函数对象、名称空间、作用域、global 和nonlocal】
函数名是可以被引用,传递的是函数的内存地址.函数名赋值给变量后,只需要在变量后加上括号即可调用函数. 名称空间 内置名称空间:在python解释器中提前定义完的名字 全局名称空间:if.while.f ...
- CI的session操作
在使用session之前,要对配置文件config.php 里面的$config['encryption_key']随便赋个值,例如1234 1. 首先要加载session类,固定写法:$this-& ...
- mysql 主从笔记
主库配置 一.修改主库配置文件 开启binlog,并设置server-id,每次修改配置文件后都要重启mysql服务才会生效 server-id = log-bin = mysql-bin binlo ...
- Duilib中各个类的简单介绍
DirectUI意为直接在父窗口上绘图(Paint on parent dc directly).即子窗口不以窗口句柄的形式创建(windowless),只是逻辑上的窗口,绘制在父窗口之上.微软的“D ...
- 洛谷P1792——[国家集训队]种树
传送门:QAQQAQ 题意:$n$个点中选$m$个不相邻的点,使得这些点不相邻(1和n算相邻),求这些点的最大值 思路:这不是神仙题不是神仙题…… 刚看到这题觉得不难,好像只要贪心就可以了但贪心不知从 ...
- Java 的锁-老王女儿的爱情
对象锁: new一个对象,都会给这个实例创建一把锁,对象中的方法必须在实例创建后,通过调用方法获取锁,一个线程进去这个方法之前拿到对象的锁,才能调用方法,否则被阻塞,举个例子,老王有个如花似玉的女儿, ...
- 16.ajax_case06
# 抓取华尔街见闻实时快讯 # https://wallstreetcn.com/live/global?from=navbar import requests import json header ...