• vue项目退出登录清除 store 数据


    方法一:(不友好,页面会白屏,不推荐使用)

    在退出登录的loginOut 方法里面:

    window.location.reload()

    方法二 : (不会出现白屏,推荐使用)

    利用v-if控制router-view,在根组件APP.vue中实现一个刷新方法

    1. <template>
    2.     <router-view v-if="isRouterAlive"/>     //路由的组件
    3. </template>
    4. <script>
    5. export default {
    6.  data () {
    7.    return {
    8.      isRouterAlive: true
    9.    }
    10.  },
    11.  methods: {
    12.    reload () {
    13.      this.isRouterAlive = false
    14.      this.$nextTick(() => (this.isRouterAlive = true))
    15.    }   
    16.  }
    17. }
    18. </script>

    然后使用的时候调用: this.reload() 方法

    方法三 : vuex清除token (不会出现白屏,推荐使用)

     vuex清除token

    由于项目中需要一个用户登出的功能,而数据放在Vuex中在登出没有刷新时数据并不会更新
    所以找到了这样一个很不错的方法

    将state以各种方式保存
    注册时调用函数赋值
    清空时再将保存的state赋值替换当前的state
    over
    1. 首先默认state时要用新的方法注册
    把数据写在函数的返回值中(其他方法也可以只要能调用)

    1. const getDefaultState = () => {
    2. return {
    3. token: getToken(),
    4. name: '',
    5. avatar: '',
    6. permList:[]
    7. }
    8. }

     2. 给Vuex中的state赋值并注册

    1. const state = getDefaultState();
    2. const store = new Vuex.Store({
    3. modules: {
    4. app,
    5. settings,
    6. state,
    7. permissions
    8. },
    9. getters
    10. })

     3. 在mutations中定义方法

    1. RESET_STATE: (state) => {
    2. Object.assign(state, getDefaultState())
    3. },

     4. 页面中使用

        commit('RESET_STATE');
    

    5. 全部完整代码如下:

    1. const getDefaultState = () => {
    2. return {
    3. token: getToken(),
    4. name: '',
    5. avatar: ''
    6. }
    7. }
    8. const state = getDefaultState()
    9. const mutations = {
    10. RESET_STATE: (state) => {
    11. Object.assign(state, getDefaultState())
    12. },
    13. }
    14. logout({ commit, state }) {
    15. return new Promise((resolve, reject) => {
    16. logout(state.token).then(() => {
    17. removeToken() // must remove token first
    18. resetRouter()
    19. commit('RESET_STATE')
    20. resolve()
    21. }).catch(error => {
    22. reject(error)
    23. })
    24. })
    25. },

    6. 退出登录

    组件中派发任务

    1. async logout() {
    2. await this.$store.dispatch("user/logout");
    3. this.$router.push(`/login?redirect=${this.$route.fullPath}`);
    4. },
    5. },

    亲自测试有效:

     

    第三种方法强烈推荐使用。

     

     最后为了方便大家的沟通与交流请加QQ群: 625787746

    请进QQ群交流:【IT博客技术分享群①】:正在跳转

  • 相关阅读:
    ORM数据库操作
    SpringBoot【访问静态资源、整合JSP、Thymeleaf】(三)-全面详解(学习总结---从入门到深化)
    网络安全(黑客)自学
    从零实现Web框架Geo教程-中间件-05
    代码随想录第35天 | ● 62.不同路径 ● 63. 不同路径 II
    一种基于网络流量风险数据聚类的APT攻击溯源方法
    数据集笔记: Porto
    vue2后台管理系统
    PySimpleGUI 使用浅谈
    Linux 配置mail 发送qq邮箱
  • 原文地址:https://blog.csdn.net/qq_41646249/article/details/125615646