vue-router导航守卫

官方API:https://router.vuejs.org/zh/guide/advanced/navigation-guards.html
首先要搞清楚routerroute的区别
router是路由的实例对象,路由的跳转就是通过这个对象
route是路由对象,主要是当前路由的一些属性,如下图
在这里插入图片描述
导航守卫: 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的。

全局的导航守卫

这要是该页面中的路由跳转不管是那个都触发这个router.beforeEach这个钩子函数要写在全局中

const router = new VueRouter({ ... })
router.beforeEach((to, from, next) => {
  // ...
  // 在路由成功跳转触发
  // to 是跳转到那个路由中
  // from 是跳转之前那个路由
  // next next()主要是起一个中间的作用
  	next(); // 前往下一个路由
  	next(false); // 打断路由的跳转
  	next({path:'/Login'}); // 跳转到/Login这个路由中
})
// 路由成功跳转后触发 因为都跳转成功了就没有next()了
router.afterEach((to, from) => {
  // 写一些跳转之后要干的事
})

路由独享的守卫

某个路由对象单独拥有的跳转监听作用和上面的一样

const router = new VueRouter({
  routes: [
    {
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
        // ...
      }
    }
  ]
})

组件内的守卫

这个要写在组件中

const Foo = {
  template: `...`,
  beforeRouteEnter (to, from, next) {
    // 在渲染该组件的对应路由被 confirm 前调用
    // 不!能!获取组件实例 `this` 指向该组件不是Vue实例
    // 因为当守卫执行前,组件实例还没被创建
    // 这里一般会对服务器发出一些请求并且对从服务器上获取的值处理或者在下面处理看情况
     next(vm => {
    // 通过 `vm` 访问组件实例
 	 })
  },
  beforeRouteUpdate (to, from, next) {
    // 在当前路由改变,但是该组件被复用时调用
    // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
    // 如果是/foo/:id这样的路由 修改后的:id 不会让执行beforeRouteEnter
    // 所以这里有时和上面的钩子函数内容一样
    // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
    // 可以访问组件实例 `this`
    // 在这里对从服务器上获取的到值进行处理
    
  },
  beforeRouteLeave (to, from, next) {
    // 导航离开该组件的对应路由时调用
    // 可以访问组件实例 `this`
	  const answer = window.confirm('确定要离开该页面么?')
	  if (answer) {
	    next()
	  } else {
	    next(false)
	  }
  }
}

结合上面的路由守卫我们可以实现一些权限控制

var router = new VueRouter({
	routes:[
		{
			path:'/login',
			.....,
			meta:{isGo:true},
			.....
		}
	]
})
router.beforeEach((to,from,next) => {
	if(to.path === '/login'){
		if(to.meta.isGo){
			next()
		}else{
			next(false)
		}
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值