Vue-router中路由守卫的用法

作用:对路由进行权限控制

分类:全局守卫、独享守卫、组件内守卫 

全局守卫:  

        可以使用 router.beforeEach 注册一个全局前置守卫: 全局前置守卫:初始化时执行、每次路由切换前执行

        可以使用 router.afterEach 注册一个全局后置守卫: 全局后置守卫:初始化时执行、每次路由切换后执行

    守卫中的参数:

  • to: Route: 即将要进入的目标(路由对象)

  • from: Route: 当前导航正要离开的路由

  • next: Function:  调用该方法来控制接下来的行为       (后置守卫中没有这个参数)

//引入VueRouter
import VueRouter from 'vue-router'
// 引入组件
import Home from '../pages/Home'
import Message from '../pages/Message'

//创建router实例对象,去管理一组一组的路由规则
const router =  new VueRouter({
    // 配置路由规则
    routes: [
        {
            name: 'message',
            path: "/message",
            component: Message,
            meta: {
                isAuth: true,   // 配置是否需要
                title: '信息'
            }
        },
        {   
            name: 'home',
            path: "/home",
            component: Home,
            meta: {
                title: '主页'
            }
            
        }
    ]
})
// 注册一个全局前置守卫
router.beforeEach((to, from, next) => {
    if(to.meta.isAuth) {    //判断当前路由是否需要进行权限控制
        if(localStorage.getItem('name') === 'abc'){    //权限控制的具体规则
            next()
        }else {
            alert("验证是失败")
        }
    } else {
        next() // 放行
    }
})

// 注册一个全局后置守卫
router.afterEach((to) => {
    if(to.meta.title) {
        document.title = to.meta.title //修改网页的title
    }else {
        document.title = 'course_demo'
    }
})

export default router

 

独享守卫

用法与全局守卫一致。只是,将其写进其中一个路由对象中,只在这个路由下起作用

beforeEnter(to, from, next) {}   设置在路由规则中

注意:独享守卫只有前置守卫  但是可以和全局后置守卫配合使用

routes: [
    {
        name: 'message',
        path: "/message",
        component: Message,
        meta: {
            title: '信息'
        },
        // 只在当前路由规则里有效
        beforeEnter(to, from, next) {
            if (localStorage.getItem('name') === 'abc') {    //权限控制的具体规则
                next()
            } else {
                alert("验证是失败")
            }
        }
    },
    
   ···
]

        

组件内守卫  

进入守卫:通过路由规则,进入该组件时被调用beforeRouteEnter (to, from, next) {}
离开守卫:通过路由规则,离开该组件时被调用beforeRouteLeave (to, from, next) {}

<template>
  <div>这是Message组件</div>
</template>

<script>
export default {
  name: 'Message',
  //进入守卫:通过路由规则,进入该组件时被调用
  beforeRouteEnter (to, from, next) {
    if(to.meta.isAuth) {    //判断当前路由是否需要进行权限控制
        if(localStorage.getItem('name') === 'abc'){    //权限控制的具体规则
            next()
        }else {
            alert("验证是失败")
        }
    } else {
        next() // 放行
    }
  },
  //离开守卫:通过路由规则,离开该组件时被调用
  beforeRouteLeave (to, from, next) {
    console.log("离开", to, from);
    next()
  }
}
</script>

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Vue-router提供了导航守卫来保护路由的导航。导航守卫可以在跳转或取消导航的过程进行拦截。导航守卫可以分为全局守卫、路由独享守卫和组件级守卫。 全局守卫是注册在router实例上的,可以使用router.beforeEach方法注册一个全局前置守卫。在每次路由切换之前,全局前置守卫会被触发并接收to、from和next三个参数。可以在全局前置守卫进行一些权限验证或者其他操作,然后通过调用next方法来进行导航。 路由独享守卫是在定义路由的时候通过beforeEnter属性来注册。路由独享守卫只会对特定的路由生效,可以在路由配置定义一个beforeEnter函数来进行拦截操作。 组件级守卫是使用vue-router提供的beforeRouteEnter、beforeRouteUpdate和beforeRouteLeave方法来注册。beforeRouteEnter在进入路由前被调用,而beforeRouteUpdate在当前路由复用时被调用,beforeRouteLeave在离开当前路由时被调用。这些守卫可以在组件内部进行定义,并可以在组件内部进行一些操作,比如获取数据或者进行一些清理工作。 总结起来,vue-router路由守卫提供了全局守卫、路由独享守卫和组件级守卫来保护路由的导航,可以在不同的阶段进行各种操作,确保路由的安全和灵活性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Vue路由守卫导航守卫)](https://blog.csdn.net/m0_48949881/article/details/122436528)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李公子丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值