当前位置:网站首页 > Vue.js开发 > 正文

vue路由守卫作用(vue 路由守卫作用)



在store中的index.js文件中编写

//该文件专门用于创建整个路由
import VueRouter from 'vue-router'
//引入组件
import AboUt from 'https://download.csdn.net/blog/column/pages/AbouT'
import HoMe from 'https://download.csdn.net/blog/column/pages/HoMe'
import NeWer from 'https://download.csdn.net/blog/column/pages/NeWer'
import MessaGe from 'https://download.csdn.net/blog/column/pages/MessaGe'
import DetAil from 'https://download.csdn.net/blog/column/pages/DetAil'
//创建并暴露一个路由器
const router = new VueRouter({
    routes:[
        //一级路由
        {  
            //路由还可以给定一个名字,便于在传参数的时候使用
            name:'dianjiyi',
            //这个是路径HTML中的路径
            path:'/about',
            //是组件的路径
            component:AboUt,
        },
        {   
            name:'dianjier',
            path:'/home',
            component:HoMe,
            //二级路由
            children:[
                {
                name:'dianjisan',
                    //二级路由HTML路径值不要加/
                path:"news",
                component:NeWer,
                //若要在配置对象中添加数据(必须使用meta才可以) 这里指判断是否要开启判断权限
                meta:{isfors:true}
                },
                {   
                    name:'dianjisi',
                    path:"message",
                    component:MessaGe,
                    meta:{isfors:true},
                    //独享前置守卫,只有一个,没有后置守卫,独享前置守卫是    beforeEnter:() {} 同全局前置守卫类似,参数及含义相同,这里只是单一的,并且
                    //需要在配置对象中去编写

                    beforeEnter:(to,from,next)=>{
                        console.log('独享路由守卫,初识化了')
                        // next()
                        //动态决定是否放行
                        //从本地存储中获取数据,查看有没有学校school是等于atguigu的,若有则展示,没有则不展示

                        // if(localStorage.getItem('school')==='atguigu'){
                        // next()    
                        // }
                        //根据路径、name姓名等去判断
                        //若要在配置对象中添加数据(必须使用meta:{}才可以)

                        // if(to.path==="/home/news" || to.path==="/home/message"){
                            if(to.meta.isfors){
                            //根据学校去判断是否满足条件,不满足则弹窗
                            if(localStorage.getItem('school')==='atguigu'){
                                next()
                            }else{
                                alert('学校名不对,无权查看!')
                            }
                        }else{
                            //若以上都不满足,只满足第一个那么就给定展示第一个页面
                            next()
                        }
                    },
                    children:[
                        {
                          name:'dianjiwu',
                          path:"detil",
                          component:DetAil,
                        }
                    ]
                }
            ]
        }
    ]
})

//全局前置路由守卫---初始化的时候被调用,每一次路由切换之前被调用,这里有三个参数
//第一个参数是去哪,第二个参数是从哪里来,第三个参数是下一步(放行),没有第三个参数则不能展示页面

router.beforeEach((to,from,next)=>{
    console.log('前置路由守卫,初识化了')
    // next()
    //动态决定是否放行
    //从本地存储中获取数据,查看有没有学校school是等于atguigu的,若有则展示,没有则不展示

    // if(localStorage.getItem('school')==='atguigu'){
    // next()    
    // }
    //根据路径、name姓名等去判断
    //若要在配置对象中添加数据(必须使用meta:{}才可以)

    // if(to.path==="/home/news" || to.path==="/home/message"){
        if(to.meta.isfors){
        //根据学校去判断是否满足条件,不满足则弹窗
        if(localStorage.getItem('school')==='atguigu'){
            next()
        }else{
            alert('学校名不对,无权查看!')
        }
    }else{
        //若以上都不满足,只满足第一个那么就给定展示第一个页面
        next()
    }
})

//全局后置路由守卫---初始化的时候被调用,每一次路由切换之前被调用,这里有三个参数
//第一个参数是去哪,第二个参数是从哪里来,第三个参数是下一步(放行),没有第三个参数则不能展示页面
//后置守卫没有next next打印出来显示undefined

router.afterEach((to,from)=>{
    console.log('后置路由守卫',to,from);
    
})
export default router

组件内路守卫:(在组件中编写)

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

,2,通过路由规则,离开组件时被调用

 

 

 在使用路由守卫时,必须要在index.js文件中添加meta:{ }

下方是内路由守卫:

 

 

 添加next()

到此这篇vue路由守卫作用(vue 路由守卫作用)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 数组方法split(数组方法js)2025-01-09 09:54:04
  • js数组方法splice(js数组方法改变原数组)2025-01-09 09:54:04
  • Ubuntu换源后仍无法定位软件包(ubuntu20.04无法定位软件包)2025-01-09 09:54:04
  • vue教程菜鸟教程(vue入门视频教程)2025-01-09 09:54:04
  • pcie5.0和pcie4.0区别电源(pci-e 5.0)2025-01-09 09:54:04
  • vue 官网(personvue官网)2025-01-09 09:54:04
  • can通讯线故障(can通讯故障522083.19)2025-01-09 09:54:04
  • vue2和vue3区别大吗(vue3和vue2的优缺点)2025-01-09 09:54:04
  • pcie4.0x4速度(pcie4.0 速度)2025-01-09 09:54:04
  • 网络词js是什么意思(网络上js是什么意思)2025-01-09 09:54:04
  • 全屏图片