vue路由守卫使用

vue路由钩子函数:

路由的钩子函数总结有6个

全局的路由钩子函数:beforeEach、afterEach

vue router.afterEach(全局后置守卫)
router.beforeEach 是页面加载之前,router.afterEach是页面加载之后

单个的路由配置内使用的钩子函数:beforeEnter

组件内的路由钩子函数:beforeRouteEnter、beforeRouteLeave、beforeRouteUpdate

所有钩子函数参数都为 (to,from,next)

to: (Route路由对象) 即将要进入的目标 路由对象 to对象下面的属性

from: (Route路由对象) 当前导航正要离开的路由

next(‘/’) 或者 next({ path: ‘/’ }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。

应用场景:可进行一些页面跳转前处理,例如判断需要登录的页面进行拦截,做登录跳转!


router.beforeEach((to, from, next) => {
    if (to.meta.requireAuth) {
        //判断该路由是否需要登录权限
        if (token) {
            //通过读取token,如果存在,name接下一步如果不存在,那跳转回登录页
            next()//不要在next里面加"path:/",会陷入死循环
        }
        else {
            next({
                path: '/login',
                query: {redirect: to.fullPath}//将跳转的路由path作为参数,登录成功后跳转到该路由
            })
        }
    }
    else {
        next()
    }
})

路由独享的守卫(路由内部钩子)

在路由上直接配置 beforeEnter 守卫:


const router = new VueRouter({
  routes: [
    {
      path: '/foo',
      component: Foo, // 这儿你可以使用路由懒加载引入
      beforeEnter: (to, from, next) => {
        // 
      }
    }
  ]

组件内的守卫(组件独享钩子)

1、beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave

beforeRouteEnter (to, from, next) {
  // 在渲染该组件的对应路由被 confirm 前调用
  // 不能!获取组件实例 this
  // 因为当钩子执行前,组件实例还没被创建
},
beforeRouteUpdate (to, from, next) {
  // 当转一个同一个页面中,当页面地址栏的参数发生变化时候,而数据并没有实时的进行更新,需要刷新页面才会显示新的数据,可通过to获取到路由的参数
  // 可以访问组件实例 `this`
},
beforeRouteLeave (to, from, next) {
  // 导航离开该组件的对应路由时调用
  // 可以访问组件实例 this
}
Vue 路由守卫是一种机制,用于在路由切换时执行一些操作或控制访问权限。Vue 提供了三种路由守卫:全局守卫、路由独享守卫和组件内守卫。 全局守卫是在整个应用程序中执行的路由守卫。可以使用 `router.beforeEach()` 函数定义全局守卫。下面是一个示例: ```javascript const router = new VueRouter({...}); router.beforeEach((to, from, next) => { // to 和 from 是路由对象,next 是一个函数 // 可以在这里检查用户是否已登录或是否有权限访问该路由 // 如果用户已登录或有权限访问该路由,则调用 next(),否则跳转到其他页面 next(); }); ``` 路由独享守卫是仅在某个路由中执行的守卫。可以使用 `beforeEnter` 属性定义路由独享守卫。下面是一个示例: ```javascript const router = new VueRouter({...}); const adminRoute = { path: '/admin', component: Admin, beforeEnter: (to, from, next) => { // 可以在这里检查用户是否已登录或是否有权限访问该路由 // 如果用户已登录或有权限访问该路由,则调用 next(),否则跳转到其他页面 next(); } } router.addRoutes([adminRoute]); ``` 组件内守卫是仅在某个组件内执行的守卫。可以使用 `beforeRouteEnter`、`beforeRouteUpdate` 和 `beforeRouteLeave` 方法定义组件内守卫。下面是一个示例: ```javascript const Foo = { template: `...`, beforeRouteEnter(to, from, next) { // 在组件实例化之前调用 // 可以在这里异步获取数据,然后传递给组件 next(); }, beforeRouteUpdate(to, from, next) { // 在组件复用时调用 // 可以在这里根据新的路由参数更新组件数据 next(); }, beforeRouteLeave(to, from, next) { // 在组件离开路由时调用 // 可以在这里提示用户保存未提交的数据 next(); } } ``` 以上是 Vue 路由守卫的基本使用方法。在实际开发中,可以根据具体场景选择不同的路由守卫来实现相应的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值