vue-router全局导航守卫

288 阅读1分钟

为什么使用导航守卫?

在一个SPA应用中,如何改变网页的标题呢?

  • 网页标题是通过title来显示的,但是SPA只有一个固定的HTML,切换不同的页面时,标题并不会改变
  • 但是我们恐雨通过JavaScript来修改title的内容window.document.title = '标题'

普通的修改方式

在每一个页面申明一个created函数,在页面创建时对标题进行修改。

created() {
    document.title = "主页";
},

这样可以实现更改页面标题的需求,但是为了这一个需求,我们需要在每一个页面中添加这段代码,这样不但增加了代码的重复性,维护的时候还异常麻烦。

全局导航守卫

vue-router提供了beforeEach和afterEach的钩子函数,它们会在路由即将改变前和改变后触发。
这里用到beforeEach来完成标题的修改,beforeEach有三个参数:

  • to:即将要进入的目标的路由对象
  • from:当前导航即将要离开的路由对象
  • next:调用该方法后,才能进入下一个钩子
//router/index.js
//在路由中添加meta.title

const routes = [
  {
    path: '/',
    redirect: '/home'
  },
  {
    path: '/home',
    name: 'Home',
    component: Home,
    meta: { 
      title: '主页'
     },
  },
  {
    path: '/about',
    name: 'About',
    component: About,
    meta: { 
      title: '关于'
     }
  }
]
router.beforeEach((to, from, next) => {
  document.title = to.meta.title
  next()
})