vue路由文件相关配置

  • Post author:
  • Post category:vue




vue路由文件相关配置



一、vue嵌套路由路径斜杠’/’的使用

路径前加/代表根路径,绝对路径,不加斜杠是相对路径

{
    path: '/about',
    name: 'about',
    redirect: '/home',
    component: function () {
      return import('@/views/AboutView.vue')
    },
    children: [
      {
        path: '/home',
        name: 'home',
        component: function () {
          return import('@/views/HomeView.vue')
        },
        meta:{
          requireAuth:true
        }
      }
    ]
 }



1.根组件上的path

如果为/about,浏览器地址栏输入 http://localhost:8080/about

如果为about(不加/),浏览器地址栏输入 http://localhost:8080/home 可以直接访问到吗?

答案是:不可以。原因是,不加/代表相对路径,它的相对位置在哪,我也不知道,但这里不是/

所以记着,这个路径前面一定要加“/”



2.根组件上的redirect

这个加不加“/”都一样,因为默认是加上的,redirect为重定向,默认使用绝对路径



3.子组件里面的path

(只要能访问到子组件,父组件就会被渲染出来)

同样的如果其值为:/home代表绝对路径,通过浏览器http://localhost:8080/index 可以直接访问到

如果是 home(不加/) 呢 ,它代表是相对路径,那相对于谁呢,当然是父组件了。因此,如果你想访问次子组件就要这样访问

http://localhost:8080/home/index



总结

根组件中的path必须加‘/’,因为不知道其相对谁

子组件(children)中的path加不加都可以,但在浏览器中输入的地址不同:

‘/home’: localhost:8080/home

‘home’: localhost:8080/about/home

参考原文链接:

https://blog.csdn.net/weixin_43887184/article/details/103546681



二、路由守卫



1、作用

对路由进行权限控制;



2、分类

全局守卫、独享守卫、组件内守卫;



3、全局守卫

全局前置守卫,初始化时执行,每次路由切换前执行

切换路由之前判断即将前往的路由是否需要登录,如果不需要直接跳转,如果需要则再判断当前是否已登录,若未登录跳转到登录页,已登录跳转至下一页

router.beforeEach((to,from,next)=>{
    if(to.meta.isAuth){//判断是否需要鉴权
        if(localStorage.getItem('token')==='token'){
            next()
        }else{
        	next('/login')
        }
    }
    else{
        next()
    } 
})

全局后置路由守卫,初始化时执行,每次路由切换之后被调用

router.afterEach(()=>{
    if(to.meta.isAuth){//判断是否需要鉴权
        document.title=to.meta.title
    }
    else{
        document.title='vue_test'
    }
})



4、独享路由守卫:某一个路由所独享的;

beforeEnter:(to,from,next)=>{
	if(to.meta.isAuth){//判断是否需要鉴权
		if(localStorage.getItem('token')==='token'){
			next()
		}
	}else{
		next()
	}
}



5、组件内路由守卫

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

beforeRouteEnter(to,from,next){
	console.log('beforeRouteEnter');
    if(to.meta.isAuth){//判断是否需要鉴权
      if(localStorage.getItem('token')==='token'){
          next()
      }
    }else{
       next()
    }
}

通过路由规则离开该组件时调用

 beforeRouteLeave(to,from,next){
     next()
 }

原文链接:

https://blog.csdn.net/qq_49916504/article/details/125350312



三、vue路由中的meta

我们经常会在进入一个页面时判断是否已经登陆,经常会用到路由导航守卫router.beforeEach(to, from, next), 一个两个页面还好,但是多的话,就会麻烦,并且路由还会嵌套。这时可以使用meta。

meta (元数据)

在配置路由时,经常会用到path,name,component,还有一个就是meta 元数据,给每个路由添加一个自定义的meta对象,在meta对象中可以设置一些状态,来进行一些操作。经常用它来做登录校验。

const routes = [
  {
    path: '/',
    name: 'tryPage',
    component: function () {
      return import('@/views/tryPage.vue')
    },
    meta: {
      requireAuth: false,
      title: 'tryPage'
    }
  },
  {
    path: '/about',
    name: 'about',
    redirect: '/home',
    component: function () {
      return import('@/views/AboutView.vue')
    },
    children: [
      {
        path: 'home',
        name: 'home',
        component: function () {
          return import('@/views/HomeView.vue')
        },
        meta: {
          requireAuth: true,
          title: 'home'
        }
      }
    ]
  }
]

配合路由守卫实现某些页面需要已登录的状态才能进入的功能

router.beforeEach((to,from,next)=>{
    if(to.meta.requireAuth){//判断是否需要鉴权
        if(localStorage.getItem('token')==='token'){
            next()
        }else{
        	next('/login')
        }
    }
    else{
        next()
    } 
})

meta中还可以根据自身需要定义其他参数,比如title,通过监听$route.meta.title对特定页面作出处理

参考原文链接:

https://blog.csdn.net/qiaoqiaoBigBoss/article/details/112908640

本文结合了多篇站内帖子用以自身记录总结学习,如有侵权请联系我修改



版权声明:本文为Snowyya原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。