vue.js - 如果目标重定向解析为相同的路径,则不调用 Vue 路由器 beforeEach

标签 vue.js vuejs2 vue-router

我在使用时遇到问题 router.push('/')作为注销的最后一步。

如果我从 / 的同一路线触发注销程序redirect s 到,router.beforeEach不会被触发,因此不会将用户重定向到 /login但仍然显示应该只对登录用户可见的路由(用户在注销过程结束时不再存在)。

{
  path: '/',
  redirect: 'foo'
},
{
  path: '/foo',
  name: 'foo',
  component: Foo,
  meta: {
    requiresAuth: true
  }
},


router.beforeEach((to, from, next) => {
  ...
  if(to.requiresAuth && userLoggedIn == false) 
    next('/login')
  ...

因此,如果我从 /foo 以外的任何路径触发注销它按预期工作,但如果我从 /foo 触发它用户是 不是 重定向到 /login .

我想这可能是使路由尽可能高效的预期行为,但在这种情况下,这绝对不是我想要的。

我如何确保我的 beforeEach将在每个 router.push/replace 上评估路由守卫?

最佳答案

router.beforeEach守卫似乎只在检测到导航变化时才运行。由于路线与您的情况相同,因此您必须通过在预期路线之前推送不同的路线路径来强制更改导航。预先推一个空的空间效果很好。这无疑是 hacky。

例如:

<button @click="$router.push(' '); $router.push('/')">Logout</button>

demo

关于vue.js - 如果目标重定向解析为相同的路径,则不调用 Vue 路由器 beforeEach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52686783/

相关文章:

vue.js - 如何使用 vuetify 图像 srcset - vuejs

javascript - Vue 2 在实例中使用外部变量

正则表达式匹配不包含斜杠的字符串

javascript - 如何在本地存储(Vue)中保存当前语言(i18n)

javascript - 在 vue 中使用 jest 时编译失败但测试用例通过

vue.js - 重置后 Vuetify 表单验证错误

javascript - 如何在安全网站上找到不可见的混合内容问题?

javascript - 将图像源传递到 Vue.js 中的作用域槽

laravel - 如何使用 Vuetify 和 Laravel 进行分页?

javascript - 什么是 <router-view :key ="$route.fullPath">?