美文网首页
vue-router 全局前置路由守卫和后置路由守卫

vue-router 全局前置路由守卫和后置路由守卫

作者: tutututudou | 来源:发表于2022-06-22 23:24 被阅读0次

index.js路由配置文件

  • 全局前置路由守卫
    有路由间的切换就会调用,调用前先验证是否有权限,满足条件则可以切换
// 全局前置路由守卫---检查是否符合跳转条件,比如taobao里点击个人中心,检查是否登录了
router.beforeEach((to,from,next) => {
  // 点击了哪个组件,可以拿到这个组件的url、path等信息
  console.log('to:',to)
  // 从哪个组件跳转过来,可以拿到这个组件的url、path等信息
  console.log('from',from)
  // 要调用next()才能真的跳转
  console.log('next',next())
})
// 使用统一暴露,方便对路由的控制
export default router
beforeEach.PNG

index.js路由配置文件

  • 用一个变量演示跳转条件,满足就跳转,实际生产这个变量可能是token、session、cokie,用于用户鉴权
let num = 6

router.beforeEach((to,_,next) => {
  console.log(to)
  const test = 4
  // 跳到哪个路由组件(每个组件都有自己的路由规则),用to这个参数,它能获取到组件的path、name之类的,to获取到的这些属性就是$route
  //只要点击组件名为name或path 为/home/message其中任意一个组件走if
  if(to.name === 'a' || to.path === '/home/message'){
    if(test === num){
      next()
    }
  } else{ //点击的不是tongzhi或message其中任意一个组件,直接跳转到刚刚点击的组件
    next()
  }
 
})

index.js文件

let num = 6

router.beforeEach((to,_,next) => {
  console.log(to)
  const test = 4
  // 如果要跳转是,很多组件都有判断是否满足条件才能跳转,会造成if里面的语句会很长,我们可以立个flag,flag为true的就判断
  // 添加自定义属性flag(名字可以随便取)要在自己的路由规则里面添加meta这个对象,
  //再添加自定义属性flag
  // if(to.name === 'a' || to.path === '/home/message'){
    if(to.meta.flag === true){
    if(test=== num){
      next()
    }
  } else{ //直接跳转
    next()
  }
 
})
// 要转成统一暴露,方便对路由的控制
export default router

index.js文件

在meta属性添加自定义属性

{
   path:'/about',
   meta:{
    flag:false,
    title:'关于'
   },
   component:About
  },
  {
   path:'/home',
   meta:{
    flag:false,
    title:'主页'
   }

index.js文件

  • 全局后置路由守卫
// *******************************************
// 全局后置路由守卫---跳转到点击的路由组件后,再进行一些调整,比如给路由组件起标题
// 只有两个参数,分别是to和from,和前置守卫一样可以拿到路由组件的参数,没有next参数
//用于分析、更改页面标题、声明页面等辅助功能
router.afterEach((to) => {
  console.log('更改了页面标题')
//点击该路由组件,且成功跳转到这个路由组件了,这样就可以修改组件的标题
  document.title = to.meta.title || '自主练习'
})
url标题.PNG

index.js文件

  • 设置组件标题(也叫url标题),这个标题也是自定义的属性,在meta添加
 {
   path:'/about',
   meta:{
    flag:false,
    title:'关于'
   },
   component:About
  },
  {
   path:'/home',
   meta:{
    flag:false,
    title:'主页' // meta添加了title
   },
   component:Home,
   children:[
    {
     name:'a',
     path:'tongzhi',
     meta:{
      flag:true,
      title:'通知'
     },
     component:TongZhi
    },

index.html(public文件夹下面的index.html)

为了防止刷新的时候,标题会显示项目的name(package.json文件的name),把index.html里面的title标签体修改一下

<!-- 修改默认title -->
    <!-- <title><%= htmlWebpackPlugin.options.title %></title> -->
    <title>自主练习</title>

相关文章

  • Vue设置路由拦截

    路由守卫 在Vue中分为全局前置守卫 router.beforeEach ,和全局后置钩子 router.afte...

  • vue-router 全局前置路由守卫和后置路由守卫

    index.js路由配置文件 全局前置路由守卫有路由间的切换就会调用,调用前先验证是否有权限,满足条件则可以切换 ...

  • vue导航守卫

    导航守卫:vue-router主要提供跳转或取消的方式守卫导航, 导航守卫分为全局前置守卫、全局解析守卫、全局后置...

  • vue-router 常见导航守卫

    全局守卫vue-router全局有三个守卫 路由独享守卫如果你不想全局配置守卫的话,你可以为某些路由单独配置守卫 ...

  • 2021-04-11

    vue-router 路由钩子函数(导航守卫) 路由钩子函数有三种: 全局钩子: beforeEach(全局前置守...

  • 华云

    一,vue路由守卫的生命周期1,全局的前置路由守卫 router.beforeEach()2, 全局解析守卫 ...

  • vue-router路由拦截器

    Vue Router 是vue.js官方路由管理器 路由出口 声明式导航 编程式导航 全局前置守卫 全局后置钩子 ...

  • Vue 路由守卫

    全局路由守卫 全局前置路由守卫 每次路由切换之前被调用、初始化的时候被调用,写到 router/index.js ...

  • vue的路由守卫

    路由守卫分3种:全局守卫路由独享守卫组件内的路由守卫 1.全局守卫:beforeEachbeforeResolve...

  • vue项目中,addRoutes在router.beforeEa

    beforeEach全局前置路由守卫,基础用法如下: next方法解析在路由守卫中,只有next()是放行,其他的...

网友评论

      本文标题:vue-router 全局前置路由守卫和后置路由守卫

      本文链接:https://www.haomeiwen.com/subject/vdetjrtx.html