Vue router(路由守卫)

全局路由守卫

全局前置守卫 (router.beforeEach):
位置:在src/router/index.js文件中配置。
作用:对任何路由跳转(包括首次加载、手动导航、编程式导航)进行统一拦截。
示例代码:

  const router = new VueRouter({ /* ... */ });
   router.beforeEach((to, from, next) => {
     // 检查是否已登录(这里仅作为示例,实际应用中可能涉及更复杂的逻辑)
     if (!isAuthenticated) {
       // 未登录,重定向到登录页
       next('/login');
     } else {
       // 已登录,允许继续访问目标路由
       next();
     }
   });

后置路由守卫

全局后置钩子 (router.afterEach):
位置:同样在src/router/index.js文件中配置。
作用:在每次路由切换成功后执行,通常用于更新页面标题、埋点统计、页面缓存清理等工作,不涉及阻断路由访问。
示例代码:

  router.afterEach((to, from) => {
     document.title = to.meta.title || 'Default Title';
     // 或者进行其他通用的后处理操作
   });

路由独享守卫(beforeEnter)

位置:在定义路由配置对象时,直接在目标路由的配置内设置。
作用:仅对特定路由生效,执行特定的权限检查或其他业务逻辑。
示例代码:

 const routes = [
     {
       path: '/admin',
       component: AdminPanel,
       beforeEnter: (to, from, next) => {
         if (!isAdminUser) {
           next('/forbidden');
         } else {
           next();
         }
       },
       meta: { title: 'Admin Panel' }
     },
     // 其他路由...
   ];

组件路由守卫

位置:在路由组件内部编写。
分类:
beforeRouteEnter: 在进入路由前调用,不能访问当前组件实例(this不可用),但可以通过回调函数传递给next方法的数据访问。
beforeRouteUpdate: 路由参数变化时(路径相同而参数不同)调用,可以访问当前组件实例。
beforeRouteLeave: 离开当前路由时调用,可以访问当前组件实例。
示例代码(以beforeRouteEnter为例):

   export default {
     data() {
       return { articleId: null };
     },
     beforeRouteEnter(to, from, next) {
       // 获取文章ID并异步加载数据
       fetchArticle(to.params.articleId)
         .then(article => {
           next(vm => {
             // 将数据注入到组件实例
             vm.article = article;
           });
         })
         .catch(() => next('/error'));
     }
   };

相关推荐

  1. vue - 守卫

    2024-05-12 22:54:07       32 阅读
  2. Vue守卫笔记

    2024-05-12 22:54:07       58 阅读
  3. vue-router(守卫)

    2024-05-12 22:54:07       37 阅读
  4. Vue router(守卫)

    2024-05-12 22:54:07       29 阅读
  5. VueRouter模式有哪几种

    2024-05-12 22:54:07       66 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-12 22:54:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-12 22:54:07       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-12 22:54:07       82 阅读
  4. Python语言-面向对象

    2024-05-12 22:54:07       91 阅读

热门阅读

  1. 大话C语言:第11篇 运算符之自增减运算符

    2024-05-12 22:54:07       31 阅读
  2. video.js的请求头问题

    2024-05-12 22:54:07       26 阅读
  3. 算法学习笔记(Nim游戏)

    2024-05-12 22:54:07       34 阅读
  4. 蓝桥杯备战12.阶乘

    2024-05-12 22:54:07       39 阅读
  5. 基于单片机的宠物智能投喂系统研究

    2024-05-12 22:54:07       31 阅读
  6. 如何excel里面数据格式设置为utf-8

    2024-05-12 22:54:07       28 阅读
  7. 使用 git rebase 还是 git merge,优缺点

    2024-05-12 22:54:07       28 阅读
  8. Vue项目中如何通过配置修改项目名称

    2024-05-12 22:54:07       40 阅读