全局路由守卫,独享路由守卫,组件内路由守卫

路由守卫:

1.作用:对路由进行权限控制

2.分类:全局路由守卫,独享路由守卫,组件内路由守卫

3.全局路由守卫:在router=>index.js

 const routes =[ 
  {
    path: '/test',
    name: 'test',
    component: () => import('../views/Test.vue'),
    meta:{
      isAuth:true,
      title:'测试'
    },
 }{
    path: '/testt',
    name: 'testt',
    component: () => import('../views/Testt.vue'),
    meta:{
      isAuth:false,  //是否需要权限校验
      title:'新闻',  //用于修改网页标题
    }
 },]

// 全局前置路由守卫:初始化时执行、每一次路由切换之前调用
router.beforeEach((to,from,next)=>{
  console.log(to,from);  //to 和 from都是对象
  // next()  //没有next所有的路由跳转都无效
  if(to.meta.isAuth){  //判断是否需要鉴权,就不用to.path === '/home/news' || to.path === '/home/msg'
    if(localStorage.getItem('school')==='atguigu'){  //权限控制的具体规则
      next()
    }else{
      alert('暂无权限查看')
    }
  }else{
    next()
  }
})
// 全局后置路由守卫:初始化时执行、每一次路由切换之后调用
router.afterEach((to,from)=>{
  console.log(to,from);
  document.title = to.meta.title || "网页标题"
})

4.独享路由守卫:

  {
    path: '/test',
    name: 'test',
    component: () => import('../views/Test.vue'),
    meta:{
      isAuth:true,
      title:'测试'
    },
    //独享路由守卫(注意:没有独享后置路由守卫,他可以配合全局后置路由守卫)
    beforeEnter: (to, from, next) => {
      if(to.meta.isAuth){  //判断是否需要鉴权
        if(localStorage.getItem('school')==='atguigu'){  //权限控制的具体规则
          next()
        }else{
          alert('暂无权限查看')
        }
      }else{
        next()
      }
    }
  },

5.组件内路由守卫:

组件内路由守卫和全局前置后置守卫还不一样,组件内守卫包括进入组件之前调用beforeRouteEnter和离开组件时调用beforeRouteLeave,这里的离开组件时并不是全局后置路由守卫,而是指,当前组件被切换到其他组件时。

router=>index.js

  {
    path: '/void',
    name: 'void',
    component: () => import('../views/Void.vue'),
    meta:{
      isAuth:ture,  //是否需要权限校验
      title:'新闻',  //用于修改网页标题
    }
  },

views=>Void.vue

<script>
import Category from '@/components/Category.vue'
  export default {
    name:'Void',
    components:{ Category},

    //通过路由规则,进入改组件时被调用
    beforeRouteEnter(to,from,next){
      console.log('beforeRouteEnter',to,from);//to一定是本组件的路由
      if(to.meta.isAuth){  //判断是否需要鉴权,就不用to.path === '/home/news' || to.path === '/home/msg'
          if(localStorage.getItem('school')==='atguigu'){  //权限控制的具体规则
            next()
          }else{
            alert('暂无权限查看')
          }
        }else{
          next()
        }
    },
    //通过路由规则,离开该组件时被调用
    beforeRouteLeave(){
      console.log('beforeRouteLeave',to,from); //from一定是本组件的路由
      next()
    }
  }
</script>

注释:什么时通过路由规则:通过切换地址栏中的路径,而不是直接挂载到APP中首次加载时。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值