当前位置: 首页 > Web前端 > vue.js

VueRouter——导航守卫-路由元信息(五)

时间:2023-03-31 23:59:37 vue.js

1.航行守卫草图。..NavigationGuard就像校门口的保安。模拟从家到学校的过程。持有学生证,方可进入学校;没有学生证或遗失学生证的,可补办学生证入校;拦截器,满足条件跳转,不满足条件取消。1.1GlobalGuard1.1.1beforeEachrouter.js:importVuefrom"vue"importVueRouterfrom"vue-router"importHomefrom"../components/home.vue"Vue.use(VueRouter)constrouter=newVueRouter({模式:'历史',路线:[{路径:'/',组件:{默认:主页,haveName:()=>导入(“../components/haveName.vue”),},},{路径:'/new',component:()=>import("../components/new.vue"),},],})router.beforeEach((to,from,next)=>{console.log(to)console.log(from)next()})exportdefaultrouter看看效果:to:whereareyougoing?来自:你来自哪里?那么next()是做什么的呢?简单的说就是控制跳跃和取消。执行next()可以跳转,执行next(false)则不能跳转。守卫也可以控制点击后跳转到指定路径,例如:router.beforeEach((to,from,next)=>{if(to.path=='/article'){next('/new')alert("Ishouldbe'/article'")}else{next()}})看效果:1.1.2beforeResolve和上面基本一样,不同的是执行时间更晚了:1.1.3afterEach1.2Route专属守卫另一个草图。..与全局守卫不同,路由独占守卫是指守卫只在跳转到指定路径时才会出现:它只有一个钩子函数,beforeEnter:例如:{path:'/about',component:()=>import("../components/about.vue"),beforeEnter:(to,from,next)=>{console.log(to)console.log(from)next()},},effect:router只有守卫在.js中为/about添加,所以只有在切换路由时输入/about才会触发守卫。1.3In-componentguards不同于globalguards和route-onlyguards。组件防护意味着组件所在的路径将被防护。1.3.1beforeRouteEnter:hot.vue:app.vue:

router.js:{path:'/',components:{default:Home,haveName:()=>import("../components/haveName.vue"),hot:()=>import("../components/hot.vue"),},},看效果:由于根路径/和/hot都使用了hot.vue组件,所以只能在Theguard中该组件只有在路由切换到这两条路径时才会被触发。1.3.2beforeRouteUpdate举个例子(动态路由切换):news.vue:beforeRouteUpdate(to,from,next){console.log(to)console.log(from)console.log('beforeRouteUpdate')next()}效果:1.3.3beforeRouteLeave1.4Guardpriority图例说明,进入商场必须先通过商场门卫,门卫放开后方可进入店铺。.应用于路由守卫,首先执行全局守卫,然后是仅路由守卫或组件守卫。1.5使用场景globalguards一般用于登录验证,常用的是beforeEach;路由专属守卫,当某条路径需要守卫时使用;组件守卫,通常用于beforeRouteLeave,用于退出查询。比如离开某条路径时,弹出一个窗口,你真的要离开吗?狠心离开。..有一张照片。1.6分析过程二、路由元信息示例:router.js:{path:'/about',component:()=>import("../components/about.vue"),meta:{info1:1,info2:true,info3:"About...",}},about.vue:结果:好的,这就是路由元信息,就这么简单。..那么它能做什么呢,请看下一章VueRouter(6),一个用guards做的小demo。题外话源码地址上一篇没有贴出来。首页有我的github地址,源码在里面。VueRouter章节的所有代码都在vue-test-code项目下,切换分支即可得到想要的代码。由于刚开始写文章,确实有些章节内容过多,结构不清晰,甚至有些混乱。后续文章将尽可能简短。VueRouter这部分很快就结束了,以后的文章和源码会讲的更清楚。如果文章或源码有什么问题,欢迎留言!保持愚蠢,保持饥饿。