vue-router 导航守卫


考虑一下这个需求:当页面发生跳转时,自动更改页面的标题。比如跳转到home页面,标题改为首页,跳转到about页面,标题改为关于。

首先,可以通过生命周期函数实现这个需求,但使用生命周期函数的话,需要在每一个组件中都添加实现代码,如果组件过多的话,这将不是一个好的选择。

这时,就可以考虑使用导航守卫的功能。

什么是导航守卫呢?导航守卫对全局跳转进行监听,并且可以根据你的需求在跳转时执行一些代码。

const router = new Router({
  routes: [
    {
      path:'/',
      redirect:'/home'
    },
    {
      path:'/home',
      component:() => import('../components/home'),
      meta:{
        title:'首页'
      }
    },
    {
      path:'/about',
      component:() => import('../components/about'),
      meta:{
        title:'关于'
      }
    }
  ],
  mode:'history'
})

//导航守卫
router.beforeEach((to,from,next) => {
  document.title = to.meta.title  //注意这里的用法,参数to的类型实际上是route类型,因此我们可以给每个route添加一个meta属性,如上
  next()  //next()在源码中已经被实现好了,这里需要加入它
})

这里需要注意的是,一旦某个路由是嵌套路由,那么显示的title将会变成undefined,这是因为path为类似于 /home/news 的格式,参数to在处理它时出现了问题。

想要解决嵌套路由的问题,只需要:

router.beforeEach((to,from,next) => {
  document.title = to.matched[0].meta.title
  next()
})

另外,既然有beforeEach(),其实容易想到应该还有afterEach()afterEach()用于在跳转之后处理某些操作。

//afterEach没有next参数
router.afterEach((to,from) => {
  ...
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值