你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

尚硅谷-尚品汇项目开发总结(第十三天)

2022/1/1 14:29:52

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
    }
})