vue-router导航钩子

路由钩子有三种:
1、全局钩子:beforeEach、afterEach
2、某个路由独享的钩子:beforeEnter
3、组件中的钩子:beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave

1、全局钩子函数

(1)beforeEach(全局前置钩子)
进入路由之前被调用,通常用于进行判断登录状态、鉴定权限等

import Vue from 'vue'
import Router from 'vue-router'
import Home from './compontent/Home'
import About from 'compontent/About'

Vue.use(Router)

const router = new Router({
	routes:[
		{
			path:'/',
			name:'Home',
			compontent:Home
		},{
			path:'/about',
			name:'About',
			compontent:About,
			meta:{
				auth:true //该路由需要登录权限
			}
		}
	]
})

router.beforeEach(to,from,next) => {
if(to.matched.some(res => res.meta.auth)) {
	if("已登录") {
		next()
	}else{
	next({
		path: '登录路由地址',
		query:{redirect:to.pullPath}
		})
		}
	}else{
		next()
	}
})

export defalut router

(2)afterEach
进入路由之后被调用,与beforeEach不同的是,这个钩子只接收两个参数,不能改变路由跳转。

2、某个路由独享的钩子函数

beforeEnter,在路由配置中直接定义

const router = new Router({
	routes:[
		{
			path:'/',
			name:'Home',
			compontent:Home,
			meta:{title:'首页'},
			beforeEnter(to, from, next) {
				next()
			}
		},{
			path:'/about',
			name:'About',
			compontent:About,
			meta:{
				title: '关于',
				auth:true //该路由需要登录权限
			}
		}
	]
})

3、组件内的钩子函数

(1)beforeRouteEnter
进入组件前被调用,此时组件实例还没有被创建,所以函数内部不能访问this,如果需要访问当前vue实例,可以通过next()方法的回调函数接收一个vm实例

export default {
	data() {
		return {
			msg:'这是消息'
		}
	},
	beforeRouteEnter(to, from, next) {
		next(vm => {
			console.log(vm.msg)
		})
	}
}

(2)beforeRouteUpdate
在路由发送变化,但是组件被复用时别调用

(3)beforeRouteLeave
离开组件时被调用,可以用来阻止页面离开,或者离开前销毁定时器等

export default {
	beforeRouteLeave(to, from, next) {
		window.clearInterval(this.timer)//清除定时器
		next()
	}
}

to:路由跳转目标路由对象
from:路由跳转离开路由对象
next:是一个函数,必须被执行,否则不会进行路由跳转。next()参数为URL路径,则会发生重定向。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值