Vue——路由守卫(全局前置路由守卫beforeEach、全局后置路由守卫router.afterEach、独享路由守卫beforeEnter、组件内路由守卫 )

这篇具有很好参考价值的文章主要介绍了Vue——路由守卫(全局前置路由守卫beforeEach、全局后置路由守卫router.afterEach、独享路由守卫beforeEnter、组件内路由守卫 )。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

目录

一、全局前置路由守卫router.beforeEach(切换之前调用,to、from、next参数)

改进代码

二、全局后置路由守卫router.afterEach( 切换之后调用,to、from参数,没有next参数)

三、独享路由守卫beforeEnter(某一个路由所单独享用的,只有前置没有后置)

四、组件内路由守卫(在组件内编写)

 beforeRouteEnter 进入前 

 beforeRouteLeave 离开后 


一、全局前置路由守卫router.beforeEach(切换之前调用,to、from、next参数)

Vue——路由守卫(全局前置路由守卫beforeEach、全局后置路由守卫router.afterEach、独享路由守卫beforeEnter、组件内路由守卫 )

 

全局前置路由守卫——初始化的时候被调用、每次路由切换之前被调用

// 该文件专门用于穿件整个应用的路由器
import VueRouter from 'vue-router'

import About from '../pages/About'
import Home from '../pages/Home'
import News from '../pages/News'
import Message from '../pages/Message'
import Detail from '../pages/Detail'

// 创建一个路由器
const router = new VueRouter({

    routes:[
        // 一级路由
        {   
            name:'guaunyu',
            // 如果路径是 /about  我们就展示About这个名字的组件
            path:'/about',
            component: About
        },
        {
         name:'zhuye',
         path:'/home',
         component: Home,
        //  二级路由
         children:[
            {
                name:'xinwen',
                // 二级路由不加斜杠
                path:'news',
                component:News
            },
            {
                // 二级路由不加斜杠
                path:'message',
                component:Message,
                // 三级路由
                children:[
                {
                    name:'xiangqing',
                    path:'detail/:id/:title',
                    component:Detail,

                    // props的第一种写法,值为对象  所有key-value都会一props的形式传给Detail组件
                    // props:{a:1,b:'hello'}


                    // props的第二种写法,值为布尔值,若布尔值为真,就会把该路由组件收到的所有params参数,以props的形式传给Detail组件
                    // props:true
                    // props的第三种写法,值为函数
                    props($route){
                        return{
                            id:$route.params.id,
                            title:$route.params.title,
                        }
                    }
                }
                ]
            }
         ]
        },
    
    ]
})

// 暴露之前添加路由守卫
// 全局前置路由守卫
// 有A路由向B路由跳转时 只要形成路由跳转,在切换之前进行调用(每一次切换之前进行调用)
// 除此之外还有初始化的时候被调用 
router.beforeEach((to,from,next)=>{
    // console.log(to,from)
    // if(to.name==='xinwen' || to.name==='xiaxoi') 这种写法也可以
    if(to.path ==='/home/news' || to.path ==='/home/message'){
        if(localStorage.getItem('school' ) === 'atguigu'){
            next()
        }else{
            alert('学校名不对,无权限查看')
        }
    }else{
        next()
    }


})

export default router

Vue——路由守卫(全局前置路由守卫beforeEach、全局后置路由守卫router.afterEach、独享路由守卫beforeEnter、组件内路由守卫 )

 

 如下如所示,如果我们校验的情况下很多,我们不可能一个一个的校验,那样比较麻烦,我们也不是很推荐下面这种写法,下面我们再学习一个新的

Vue——路由守卫(全局前置路由守卫beforeEach、全局后置路由守卫router.afterEach、独享路由守卫beforeEnter、组件内路由守卫 )

改进代码

// 该文件专门用于穿件整个应用的路由器
import VueRouter from 'vue-router'

import About from '../pages/About'
import Home from '../pages/Home'
import News from '../pages/News'
import Message from '../pages/Message'
import Detail from '../pages/Detail'

// 创建一个路由器
const router = new VueRouter({

    routes:[
        // 一级路由
        {   
            name:'guaunyu',
            // 如果路径是 /about  我们就展示About这个名字的组件
            path:'/about',
            component: About,
        },
        {
         name:'zhuye',
         path:'/home',
         component: Home,
        //  二级路由
         children:[
            {
                name:'xinwen',
                // 二级路由不加斜杠
                path:'news',
                component:News,
                meta:{
                    // 是否授权
                    isAuth:true
                }
            },
            {
                // 二级路由不加斜杠
                path:'message',
                component:Message,
                meta:{
                    // 是否授权
                    isAuth:true
                },
                // 三级路由
                children:[
                {
                    name:'xiangqing',
                    path:'detail/:id/:title',
                    component:Detail,
                    // props的第一种写法,值为对象  所有key-value都会一props的形式传给Detail组件
                    // props:{a:1,b:'hello'}

                    // props的第二种写法,值为布尔值,若布尔值为真,就会把该路由组件收到的所有params参数,以props的形式传给Detail组件
                    // props:true
                    // props的第三种写法,值为函数
                    props($route){
                        return{
                            id:$route.params.id,
                            title:$route.params.title,
                        }
                    }
                }
                ]
            }
         ]
        },
    
    ]
})

// 暴露之前添加路由守卫
// 全局前置路由守卫
// 有A路由向B路由跳转时 只要形成路由跳转,在切换之前进行调用(每一次切换之前进行调用)
// 除此之外还有初始化的时候被调用 
router.beforeEach((to,from,next)=>{
    //  判断是否需要鉴定一下权限
    if(to.meta.isAuth){
        if(localStorage.getItem('school' ) === 'atguigu'){
            next()
        }else{
            alert('学校名不对,无权限查看')
        }
    }else{
        next()
    }

})

export default router

二、全局后置路由守卫router.afterEach( 切换之后调用,to、from参数,没有next参数)

Vue——路由守卫(全局前置路由守卫beforeEach、全局后置路由守卫router.afterEach、独享路由守卫beforeEnter、组件内路由守卫 )

 

全局后置路由守卫——初始化的时候被调用、每次路由切换之后被调用

   需求:当我们更换组件之后,要求页面的title也会跟着修改

     我们应该先配置一下每个组件的meta对象,增加一个title属性,当我们点击这个组件的时候,获取这个title,将其放到页面的title上面

                    meta:{
                        // 是否授权
                        isAuth:true,
                        title:'详情'
                    },
// 全局后置路由守卫——初始化的时候被调用、每次路由切换之后被调用
router.afterEach((to,from)=>{
    // 这个地方没有next了,因为已经切换完了,也没办法守卫了

    // 因为如果运行这个函数的话,说明已经切换完了,我们完全可以修改网页的title了
    document.title = to.meta.title || '硅谷系统'
})

三、独享路由守卫beforeEnter(某一个路由所单独享用的,只有前置没有后置)

需求:对某一个路由(新闻路由)做出限制

Vue——路由守卫(全局前置路由守卫beforeEach、全局后置路由守卫router.afterEach、独享路由守卫beforeEnter、组件内路由守卫 )

 

Vue——路由守卫(全局前置路由守卫beforeEach、全局后置路由守卫router.afterEach、独享路由守卫beforeEnter、组件内路由守卫 )

 

         children:[
            {
                name:'xinwen',
                // 二级路由不加斜杠
                path:'news',
                component:News,
                meta:{
                    // 是否授权
                    isAuth:true,
                    title:'新闻'
                },
                beforeEnter:(to,from,next)=>{
                     //  判断是否需要鉴定一下权限
                    if(to.meta.isAuth){
                        if(localStorage.getItem('school' ) === 'atguigu'){
                            next()
                        }else{
                            alert('学校名不对,无权限查看')
                        }
                    }else{
                        next()
                                }
                }
                
            },

 

四、组件内路由守卫(在组件内编写)

Vue——路由守卫(全局前置路由守卫beforeEach、全局后置路由守卫router.afterEach、独享路由守卫beforeEnter、组件内路由守卫 )

 

 beforeRouteEnter 进入前 

通过路由规则,进入该组件时被调用

  // 通过路由规则,进入该组件时被调用
  beforeRouteEnter (to, from, next) {
    //  判断是否需要鉴定一下权限
    if(to.meta.isAuth){
        if(localStorage.getItem('school' ) === 'atguigu'){
            next()
        }else{
            alert('学校名不对,无权限查看')
        }
    }else{
        next()
    }

 beforeRouteLeave 离开后 

通过路由规则,离开该组件时被调用(这个不能说是后置,因为进入之后并不会触发 而是离开这个组件之前会触发)文章来源地址https://www.toymoban.com/news/detail-477081.html

    // 通过路由规则,离开该组件时被调用
    beforeRouteLeave (to, from, next) {
      next()
    }

到了这里,关于Vue——路由守卫(全局前置路由守卫beforeEach、全局后置路由守卫router.afterEach、独享路由守卫beforeEnter、组件内路由守卫 )的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 路由缓存问题 | vue-router的导航守卫

             带参路由,当 参数发生变化时,相同的组件实例将被复用 ,组件的 生命周期钩子不会被调用, 导致 请求不会被重新发送, 以至于 数据无法更新 。 两种解决方法: 1. 给 RouterView绑定key值 ,即 特点:不复用,破坏组件缓存,强制执行,存在一定的 浪费 ,即

    2024年02月09日
    浏览(41)
  • 【无标题】 Vue 路由库Router 【重点】 - 安装 - 基本使用 - 路由配置 - 路由模式 - 路由传递参数 - 路由内置对象 - 路由守卫

    Vue 路由库Router 【重点】 安装 基本使用 路由配置 路由模式 路由传递参数 路由内置对象 路由守卫 Vue的内置API 【掌握】 ref Vue.set Vue.nextTick Vue.filter Vue.component Vue.use Vue.directive 进行页面的跳转(相当于a标签),Vue是SPA单页面应用,他的页面跳转必须使用Vue-Router路由进行实现

    2024年02月06日
    浏览(43)
  • vue中 router.beforeEach() 的用法

    导航守卫 主要是通过跳转或取消得方式守卫导航 在前端路由跳转中,路由跳转前都是会经过beforeEach,而beforeEach可以通过next来控制到底去哪个路由。 根据这个特性我们就可以在beforeEach中设置一些条件来控制路由的重定向。 常见的使用场景有: 1、验证用户是否登录(若未登

    2024年02月20日
    浏览(27)
  • PostMan前置脚本/后置脚本/断言

    1. 使用脚本的意义:利用脚本可以降低联调工作量.,如 1.1 前置脚本请求前执行;用于设置参数, 可以用于多个用户注册, 1.2 后置脚本可以对执行请求结果进行校验,设置变量,用于下一个请求 http请求前执行;用于设置参数; http请求后执行;可以测试请求执行结果;可以解析结果

    2024年02月12日
    浏览(70)
  • Postman之脚本(前置脚本、后置脚本)

    目录 review一下pm 前置脚本Pre-request Script 后置脚本Tests Postman中的所有的脚本编写都要通过pm pm =Postman的简写 常用的pm语法: pm.globals.set(\\\"variable_name\\\",\\\"variable_value\\\");      设置全局变量 pm.globals.set(\\\"variable_key\\\", \\\"variable_value\\\");  设置环境变量 pm.globals.get(\\\"variable_name\\\");      获取全

    2024年02月09日
    浏览(39)
  • Vue 路由 路由守卫

    路由守卫 正如其名, vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。简单来说,就是在路由跳转 时候的一些钩子,当从一个页面跳转到另一个页面时,可以在跳转前、中、后做一些事情。 当你打开一个页面的前后需要去干什么。 每个守卫方法接收参数:

    2024年02月14日
    浏览(49)
  • JMeter---BeanShell实现接口前置和后置操作

     在JMeter中,可以使用BeanShell脚本来实现接口的前置和后置操作。 下面是使用BeanShell脚本实现接口前置和后置操作的步骤: 1、在测试计划中添加一个BeanShell前置处理器或后置处理器。 右键点击需要添加前置或后置操作的接口请求,选择\\\"Add\\\" - “Pre Processors” 或 “Add” - “

    2024年02月19日
    浏览(38)
  • Jmeter前置处理器和后置处理器

    1. 后置处理器(Post Processor) 本质上是⼀种对sampler发出请求后接受到的响应数据进⾏处理 (后处理)的⽅法  正则表达式后置处理器 (1)引⽤名称:下⼀个请求要引⽤的参数名称,如填写title,则可⽤${title}引⽤它 (2)正则表达式: ():括起来的部分就是要提取的。 .:匹配

    2023年04月21日
    浏览(42)
  • vue - 路由守卫

    Vue路由守卫是一种机制,用于在导航过程中对路由进行监控和控制。Vue Router提供了三种类型的路由守卫: 1. 全局前置守卫:router.beforeEach 2. 全局解析守卫:router.beforeResolve 3. 全局后置守卫:router.afterEach 这些守卫可以用来进行权限验证、页面加载前的处理、页面切换时的

    2024年04月25日
    浏览(37)
  • 解密!Vue路由守卫的使用

    什么是路由 对路由这个概念,可能有些人并不很理解,但是路由器大家应该都不陌生。我们可以先来了解一下路由器是什么。路由器现在基本上家家都会有,大家是否好奇过它名字的来源?其实搞懂了路由器名字的来历,我们就可以搞懂什么是路由了,如下图: 上面两张图分

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包