路由导航守卫

路由导航守卫(Navigation Guards)是 Vue Router 提供的功能,用于控制用户在应用中的导航行为。简单来说,它们允许你在用户访问不同路由时执行一些代码,比如检查用户是否登录、加载数据或阻止导航等。

比喻:可以将其想象成机场的安检。安检元在你登机前会检查你的证件和行李,确保一切符合要求,然后才允许你进入登机口。

路由导航守卫的主要类型

1.全局守卫:(全局守卫就像博物馆的总管理员,负责在你进入任何粘贴之前检查你的票和身份,确保你符合参观的基本条件)

  • 全局前置守卫 (beforeEach) : 在每次路由切换前执行,可以用于检查用户是否已登录。(像是你进博物馆之前的安检,确保你有票,身份信息合法,然后才允许你进入。如果不符合条件,你就会被拒绝入馆)
    // 创建 Vue Router 实例
    
    const router = new VueRouter({
        route: [
        //定义路由
        ]
    
    });
    
    
    //全局前置守卫
    router.beforeEach((to,from,next) => {
        
        //检查用户是否登录
        if(to.meta.requiresAuth && !isLoggedIn()){
        
            next('/login')
        } else {
        
            //继续导航
            next();
        }
    
    
    });
    
  • 全局解析守卫(beforeResolve):在每次路由切换前执行,并且在组件内守卫和异步路由组件解析之后执行。适用于需要在数据解析之后但在导航确认执行之前执行的逻辑。(类似于在安检之后。但在进入展厅之前的最后检查,确认所有的准备工作都已完成,然后才允许你进入展厅)
    router.beforeResolve((to,from,next) => {
        next();
    
    
    });

  • 全局后置守卫(afterEach):在路由切换完成后执行,一般用于执行一些跟踪或日志记录。(像是你参观结束后的离馆记录,记录你参观了哪些展厅,或是收集你的反馈,但不影响你接下来的行为。)

2. 路由独享守卫:

  • beforeEnter: 在进入路由之前执行,只对某个路由有效。通常用于特定路由的导航检查。(像博物馆中某些特定展厅的特别要求,你只有在进入特定展厅时才会遇到这些检查,比如有些展厅需要特定的参观许可或有年龄限制。)
    const routes = [
      {
       //特定展厅的入口检查
        path: '/special-exhibit',
        component: SpecialExhibit,
        beforeEnter: (to, from, next) => {
          if (hasSpecialTicket()) {
            next();
          } else {
            next('/no-access');
          }
        }
      }
    ];

3. 组件内守卫:(组件内守卫就像博物馆中某个展厅的内部规定和检查,只有在你已经进入展厅后,才会遇到这些检查,比如展厅内不能拍照等

  • beforeRouteEnter: 在进入该组件对应的路由之前执行,可以用来在组件实例被创建之前,访问组件的路由信息。(在进入展厅之前,你会遇到展厅导览员的检查,导览员会在你进入展厅之前提供额外的信息或帮助)
  • beforeRouteUpdate: 在当前路由改变,但该组件被复用时调用,比如在动态路由参数变化时,执行某些操作。当你在展厅内改变视角,如从一个展品切换到另外一个展品时,这个守卫处理展品之间的转换,确保你在新展品前做了一些准备。)
  • befzhantoreRouteleave: 当你离开展厅时,确保你已经完成所有参观步骤,比如归还耳机或记录观展反馈。
export default {
   name: 'MyComponent',
   beforeRouteEnter(to,from,next){
    //在进入该组件路由之前执行
    next(vm => {
        
      //在组件实例创建之后可以访问实例
     });
    
   },

 beforeRouteUpdate(to,from,next) {
    // 当路由变化但组件复用时调用
  next();

    
  },
 
beforeRouteLeave(to,from,next) {
    // 在离开当前路由时调用
    // 可以用来保存用户输入的数据或进行清理操作
    next();
    

 }





};

  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue中,路由导航守卫主要用于守卫导航的过程,可以通过跳转或取消的方式来控制路由的行为。根据官方文档的解释,导航守卫可以分为全局前置守卫、路由独享守卫以及组件级别守卫。全局前置守卫是通过使用router.beforeEach()方法来注册的,可以在进入每个路由之前执行特定的逻辑。除了全局前置守卫,还有其他的导航守卫触发的时机,例如在离开路由的组件中调用beforeRouteLeave、在重用的组件中调用beforeRouteUpdate以及在路由配置中调用beforeEnter等等。这些导航守卫可以帮助我们在路由切换的不同阶段执行一些操作,例如验证用户权限、加载数据等。总的来说,Vue的路由导航守卫提供了一种灵活的方式来控制路由的行为,使我们能够更好地管理和控制应用的导航行为。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Vue - 路由守卫](https://blog.csdn.net/wen110898/article/details/121011493)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [Vue 路由钩子(导航守卫)详解及应用场景](https://download.csdn.net/download/weixin_38630324/14043791)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值