正如其名,vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。这里有很多方式植入路由导航中:全局的,单个路由独享的,或者组件级的。
可以使用 router.beforeEach() 函数注册一个全局前置守卫
// 创建路由
import { createRouter, createWebHashHistory } from "vue-router";
const router = createRouter({
history : createWebHashHistory(),
routes : routes
});
router.beforeEach((to, from) => {
console.log(to, from);
// 自己的路由拦截逻辑代码
});
当一个导航触发时,全局前置守卫按照创建顺序调用。守卫是异步解析执行,此时导航在所有守卫 resolve 完之前一直处于等待中。每个守卫方法接收两个参数 :
to: 即将要进入的目标对象
from: 当前导航正要离开的路由对象
可以返回的值如下 :
# false : 取消当前的导航。
# 一个路由地址 : 通过一个路由地址跳转到一个不同的地址,就像你调用 router.push() 一样,你可以设置诸如 replace: true 或 name: 'home' 之类的配置。当前的导航被中断,然后进行一个新的导航,就和 from 一样。
# 如果遇到了意料之外的情况 : 可能会抛出一个 Error。这会取消导航并且调用 router.onError() 注册过的回调。
# 如果什么都没有,undefined 或返回 true,则导航是有效的
import { createRouter, createWebHashHistory } from "vue-router";
const router = createRouter({
history : createWebHashHistory(),
routes : routes
});
router.beforeEach((to, from) => {
console.log(to, from);
// 自己的路由拦截逻辑代码
// 比如拦截 User 路由
console.log(to.path);
if(to.path == '/User'){
return false; // 返回 false
}
});