Vue Router 导航守卫:控制路由跳转的利器
Vue Router 的导航守卫(Navigation Guards)是用来控制路由跳转的钩子函数。它可以在路由导航前、路由导航后和路由完成后执行相应的逻辑。\n\nVue Router 提供了三种类型的导航守卫:\n\n1. 全局前置守卫(beforeEach):在路由导航之前执行,常用于验证用户是否登录或者判断用户权限。\n2. 全局解析守卫(beforeResolve):在路由导航被确认之前执行,常用于获取路由参数或者准备数据。\n3. 全局后置守卫(afterEach):在路由导航之后执行,常用于页面统计或者清理工作。\n\n除了全局守卫外,Vue Router 还支持在路由配置中定义组件级别的守卫:\n\n1. 路由独享的守卫:在路由配置中使用 beforeEnter 字段定义,只对当前路由有效。\n2. 组件内的守卫:在组件中使用 beforeRouteEnter、beforeRouteUpdate 和 beforeRouteLeave 定义,只对当前组件有效。\n\n导航守卫的使用示例:\n\njavascript\nconst router = new VueRouter({\n routes: [\n {\n path: '/home',\n component: Home,\n beforeEnter: (to, from, next) => {\n // 在进入路由之前执行\n if (isAuthenticated()) {\n next();\n } else {\n next('/login');\n } }\n },\n {\n path: '/profile',\n component: Profile,\n beforeEnter: (to, from, next) => {\n // 在进入路由之前执行\n if (hasPermission()) {\n next();\n } else {\n next('/403');\n } }\n }\n ]\n});\n\nrouter.beforeEach((to, from, next) => {\n // 在路由导航之前执行\n console.log('beforeEach');\n next();\n});\n\nrouter.afterEach((to, from) => {\n // 在路由导航之后执行\n console.log('afterEach');\n});\n\n\n以上示例中,beforeEach 和 afterEach 是全局前置守卫和全局后置守卫。beforeEnter 是路由独享的守卫。在进入 /home 和 /profile 路由之前,会先执行 beforeEnter 中的逻辑判断是否允许进入路由。
原文地址: https://www.cveoy.top/t/topic/pQgs 著作权归作者所有。请勿转载和采集!