vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > vue3动态绑定exclude在退出登录时清除keepAlive缓存

vue3如何通过动态绑定exclude在退出登录时清除keepAlive缓存

作者:Tt涛㏒

这篇文章主要介绍了vue3如何通过动态绑定exclude在退出登录时清除keepAlive缓存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

vue: 3.2.13 (script setup模式)

在vue开发中使用keepAlive来缓存组件是比较常见的做法,但是当我们需要实现退出登录功能时就会发现,跳转到登录页面后再次登录还残留着上一个用户缓存的数据

故障分析

上一个登录的用户操作的数据被keepAlive缓存了,这个用户退出登录后没有清除缓存,再次登录的用户页面会加载上一个用户的缓存数据

解决方案

退出登录按钮逻辑部分

import {useStore} from 'vuex'
import {useRouter} from 'vue-router'
import {ref} from "vue";

const store = useStore()
const router = useRouter()
  
//将需要清除缓存的组件名存放在exclude中(<script setup>模式下只需填写vue组件名,不需要写文件后缀名)
//也可以存放一个正则表达式让所有.vue文件缓存删除,具体根据实际业务需求来设置
const exclude = ref<string>("Goods,Home,Order,Type,User,Login")

const out = () => {
  //清除用户token
  sessionStorage.removeItem('o_m_s')
  //通过store.commit提交修改vuex中exclude数据,并将上面定义的exclude传递给vuex
  store.commit('changeExcludeOut', exclude.value)
  //清除权限列表
  store.commit('out')
  //跳转到登录页或自定义页面(跳转登录操作放在最后执行)
  router.replace('/')
 }

vuex部分逻辑

import {createStore} from 'vuex'

export default createStore({
  state() {
    return {
      //用户信息和权限列表
      info: null,
      //默认排除组件列表
      exclude: "Login"
    }
  },
  getters: {},
  mutations: {
    //清除权限列表
    out(state) {
      state.info = null
    },
    //清除keepAlive缓存,用于退出登录
    changeExcludeOut(state, value) {
      state.exclude = value
    },
    //重新设置排除列表,用于跳转到登录页
    changeExcludeLogin(state){
      state.exclude = "Login"
    }
  },
  actions: {},
  modules: {}
})

app.vue部分

<template>
  <nav-bar v-if="route.meta.navBar"></nav-bar>
  <router-view v-slot='{Component}'>
    <!--  使用v-bind动态绑定exclude,数据从vuex中提取  -->
    <keep-alive :exclude="store.state.exclude">
      <component :is='Component'></component>
    </keep-alive>
  </router-view>
</template>
import {useStore} from 'vuex'
const store = useStore()

登录页逻辑部分

import {onBeforeMount} from 'vue'
import {useStore} from 'vuex'

const store = useStore()

//在login组件挂载前通过store.commit重新修改vuex中的排除列表
onBeforeMount(() => {
  store.commit('changeExcludeLogin')
})

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文