自己遇到的問題記錄一下坡疼,做一個企業(yè)微信鑒權登錄控轿,首頁獲取用戶信息存session方便后續(xù)頁面調(diào)用缠诅。
在App.vue中寫了鑒權哑蔫,調(diào)用接口拿到了返回的用戶信息钉寝,并且存在了session中。但是在首頁home.vue中拿取不到session數(shù)據(jù)闸迷。后來查了半天嵌纲,請教了幾個vue同行知道問題出在了哪里。
由于是異步請求腥沽,而app和home在請求還未完成時就已經(jīng)加載完畢了疹瘦,導致從session中拿取不到數(shù)據(jù)。知道問題出在哪里就可以針對性解決了巡球。
本來想通過vuex去解決言沐,但是這個問題只存在首頁,沒必要引入vuex酣栈,所以就使用了evenbus去傳值险胰。不說了,上代碼矿筝。
首先現(xiàn)在main.js里
main.js
import Vue from 'vue'
import App from './App'
import router from './router'
// 引入URL配置
import ajax from '../static/config/request'
Vue.config.productionTip = false;
Vue.prototype.$axios = ajax;
// 聲明一個全局的evenbus
window.evenBus = new Vue();
App.vue
created(){
// 初始化調(diào)試工具
var vConsole = new VConsole();
// 授權登陸
if(!this.getCode('code')) {
let redirect_uri = encodeURIComponent('www.asdasdsd.com')
window.location.
} else {
// 獲取用戶信息
this.getUserInfo()
console.log('app: '+sessionStorage.getItem('user')) // 這里打印是null起便,其實session中已經(jīng)存了
}
},
methods:{
getUserInfo() {
let nowcode = this.getCode('code')
let dataobj = {
'Code': nowcode,
// 'Code': 'nZCZMLmDMocbEksqNbtJJ07E_xPgusw4GtskBl5PCX8',
}
this.$axios.get('asdsadasd', dataobj)
.then(res => {
res = JSON.parse(res)
// console.log(res)
if(res.Data.Statu_Code == 200) {
sessionStorage.setItem('user', JSON.stringify(res.Data.UserInfo))
// 異步執(zhí)行,無法在本頁面中查到窖维。使用evenbus傳值
evenBus.$emit('userInfo',res.Data.UserInfo)
} else {
console.log(res.Data.Msg)
}
})
.catch(err => {
console.log(err);
});
},
getCode(codeName) {
const reg = new RegExp('[?&]' + codeName + '=([^&#]+)');
let query = window.location.href.match(reg)
return query ? query[1] : null;
},
}
home.vue
created() {
console.log('home: '+sessionStorage.getItem('user')) // 這里打印是null榆综,其實session中已經(jīng)存了
evenBus.$on('userInfo',this.getuser)
},
methods: {
getuser(userInfo) {
this.ZSNAME = userInfo.ZSNAME
}
}
好了,解決铸史,但是還用一點小小的瑕疵就是頁面出來后這個數(shù)據(jù)會有一點點延遲才會顯示出來鼻疮。這個主要是看請求速度了。
如果小伙伴門還有其他不使用vuex和evenbus的方法的話琳轿,歡迎交流判沟。