时间:2021-05-26
在路由跳转的时候,我们需要一些权限判断或者其他操作。这个时候就需要使用路由的钩子函数。
定义:路由钩子主要是给使用者在路由发生变化时进行一些特殊的处理而定义的函数。
总体来讲vue里面提供了三大类钩子,两种函数
1、全局钩子
2、某个路由的钩子
3、组件内钩子
两种函数:
1、Vue.beforeEach(function(to,form,next){})
2.Vue.afterEach(function(to,form))
全局钩子函数
顾名思义,它是对全局有效的一个函数
beforeEach函数有三个参数:
afterEach函数不用传next()函数
某个路由的钩子函数
顾名思义,它是写在某个路由里头的函数,本质上跟组件内函数没有区别。
const router = new VueRouter({ routes: [ { path: '/login', component: Login, beforeEnter: (to, from, next) => { // ... }, beforeLeave: (to, from, next) => { // ... } } ]})路由组件的钩子
注意:这里说的是路由组件!
路由组件 属于 组件,但组件 不等同于 路由组件!所谓的路由组件:直接定义在router中component处的组件。如:
var routes = [ { path:'/home', component:home, name:"home" }]在子组件中调用路由的钩子函数时无效的。
在官方文档上是这样定义的:
可以在路由组件内直接定义以下路由导航钩子
这里简单说下钩子函数的用法:它是和data,methods平级的。
beforeRouteLeave(to, from, next) { next()},beforeRouteEnter(to, from, next) { next()},beforeRouteUpdate(to, from, next) { next()},data:{},method: {}PS:在使用vue-router beforeEach钩子时,你也许会遇到如下问题:
源码:
router.beforeEach((to, from, next) => {//判断登录状态简单实例var userInfo = window.localStorage.getItem('token');if (userInfo) {next();} else {next('/login');}})然后你会发现出现如下错误:出现dead loop错误
解决方案:
router.beforeEach((to, from, next) => {var userInfo = window.localStorage.getItem('token');//获取浏览器缓存的用户信息if(userInfo){ //如果有就直接到首页咯next();} else {if(to.path=='/login'){ //如果是登录页面路径,就直接next()next();} else { //不然就跳转到登录;next('/login');}}})解决思路:
排除此时地址 = 转向的地址 的情况,避免dead loop, 问题很简单,但一不小心就入坑了
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
使用VueRouter的beforeEach钩子函数,可以实现导航跳转前检查登录状态的需求。1.在登录请求接口时返回用户的信息,比如userInfo:{user
本文实例讲述了vue-router的钩子函数用法。分享给大家供大家参考,具体如下:vue路由钩子大致可以分为三类:1.全局钩子主要包括beforeEach和af
前言说到Vue的钩子函数,可能很多人只停留在一些很简单常用的钩子(created,mounted),而且对于里面的区别,什么时候该用什么钩子,并没有仔细的去研究
曾经见过为了让钩子函数的异步代码可以同步执行,而对钩子函数使用async/await,就好像下面的代码://exp-01exportdefault{asyncc
1.钩子函数钩子函数是Windows消息处理机制的一部分,通过设置“钩子”,应用程序可以在系统级对所有消息、事件进行过滤,访问在正常情况下无法访问的消息。钩子的