vue3获取用户角色后判断路由进行页面跳转,但后台修改了用户角色,需要访问两次网页才正确跳转路由
时间: 2024-09-17 08:02:27 浏览: 69
vue路由跳转时判断用户是否登录功能的实现
5星 · 资源好评率100%
在Vue 3中,你可以通过组件内的生命周期钩子函数`beforeRouteUpdate`或`watch`监听用户的角色变化。当你从服务器获取到用户的角色信息后,可以将其存储在Vuex store或者其他合适的响应式状态管理方案中,如计算属性或局部数据。
当角色更新时,你可以这样做:
1. 使用 `beforeRouteUpdate` 钩子:
```javascript
export default {
// ...其他配置
beforeRouteUpdate(to, from, next) {
axios.get('/api/user/roles') // 获取用户角色
.then(response => {
const roles = response.data; // 存储角色数组
if (roles.includes('管理员')) { // 判断角色是否符合条件
next({ path: '/admin-panel' }) // 跳转到相应页面
} else {
next() // 如果不符合条件,继续加载当前页面
}
})
.catch(err => {
console.error('获取角色失败', err);
next(); // 或者默认处理错误情况,跳转回原来页面
});
},
// ...其他方法
}
```
2. 或者使用 `watch` 和 `store`:
```javascript
import { watch } from 'vue';
import { getters } from '@/store/mutations';
export default {
setup() {
watch(getters.getUserRoles, async roles => {
if (roles.includes('管理员')) {
await this.$router.push('/admin-panel');
}
}, { immediate: true }); // 立即运行首次检查
return {};
},
// ...其他配置
};
```
在这种情况下,如果后台修改了用户角色并且刷新页面前未及时更新到缓存,可能会导致第一次跳转不是正确的。为了解决这个问题,可以在`beforeMount`钩子或初始化时也尝试获取一次用户角色,并在之后的任何时候都确保角色是最新的。
阅读全文