23:小知识点
23.1 vuex存储数据默认不是持久化的,刷新之后就会消失(vuex的存储的数据只是在页面的中,相当于我们定义的全局变量,刷新之后,里边的数据就会恢复到初始化状态。)
在组件每次挂载的时候都执行一次获取数据的函数,防止本组件vuex数据丢失。
mounted(){
this.getData()
}
23.2 token:当用户登录成功时,服务器会给浏览器返回一个用户的唯一标识(token),本质是一个字符串,当需要用户信息进行展示时,浏览器需要把token作为令牌来获取用户相关数据。
23.3 store.watch():再路由js文件中引入vuex中的store,在前置路由守卫中不能够拿到store中的数据(具体数据)
问题演示:路由文件中
import store from '@/store'
// 全局前置路由守卫
router.beforeEach((to,from,next)=>{
console.log(store.state.loginAndRegister); //能够拿到userInfo
console.log(store.state.loginAndRegister.userInfo); //不能够拿到userInfo
})
原因:路由载入的时候拿不到vuex异步请求信息
解决:使用store.watch()方法:当第一个函数的返回值发生变化的时候,第二个函数(回调函数)就能够捕捉到数据
import store from '@/store'
// 全局前置路由守卫
router.beforeEach((to,from,next)=>{
console.log(store.state.loginAndRegister); //能够拿到userInfo
console.log(store.state.loginAndRegister.userInfo); //不能够拿到userInfo
store.watch((store)=>store.loginAndRegister.userInfo,(userInfo)=>{
console.log(userInfo); //能够拿到userInfo
console.log(userInfo.name); //也能够拿到userInfo中的name属性
})
})
23.4 可以以全局事件总线的方式,把封装的所有请求文件引入,在组件中就可以以总线方式(this.$API.xxx)发送请求。但是在vuex的store中不行,因为store中的this是store,不是vm。
//引入全部的请求函数
import * as API from '@/api'
new Vue({
render:h=>h(App),
beforeCreat(){
Vue.prototype.$bus = this,
Vue.prototype.$API = API
}
})
