路由守卫是vue-router对象的一个重要属性,本质上是一个函数。它的主要功能是通过跳转或取消的方式守卫导航。在路由切换时,路由守卫会被调用,可以用来执行一些权限控制,例如检查用户是否已经登录。
路由守卫的使用可以分为组件内的守卫、全局守卫和路由独享的守卫三种方式。具体来说:
-
组件内的守卫: 这种守卫应用于路由级别,并不是任意组件,而是特定路由组件。
[ { path:'/home', component: Home, beforeEnter:(to,from,next)=>{...} } ] -
全局守卫:全局守卫分为全局前置守卫和全局后置守卫。当一个导航触发时,全局前置守卫按照创建顺序调用。它们是异步解析执行的,此时导航在所有守卫resolve完之前一直处于等待中。一般来说,全局前置守卫的执行时间是初始化时执行,每次路由切换前都会执行。可以类比为一座房子的大门,整个小区就这一个大门,你想要进入其中任何一个房子,都需要经过这个大门的检查。
beforeEach、 afterEach 、beforeResolveconst router = new VueRouter({ mode: 'history', base: process.env.BASE_URL, routes }) router.beforEach((to,from,next)=>{ ... //to是将要进去的路由,from是正要离开的路由 //next()用来resolve这个钩子,next(false)不让它跳转,next('/home'),next({path:'/home'}) }) -
路由独享的守卫: 这种方式与全局守卫类似,但是只针对特定的路由进行守卫。 beforenter
{ data(){return {}}, beforeRouteEnter(to,from,next){ next() } }