在Vue路由中meta是用于存储额外的配置信息的对象。

作用:

1、meta对象可以用来存储页面标题

2、权限验证

3、缓存控制设置等信息

4、面包屑导航

5、动画效果

6、国际化支持


存储标题:

export default [
    {
        path:'/',
        name:"Index",
        component: { render: () => h(resolveComponent("router-view")) },
        redirect:'/',
        meta:{title:"主页"},
        requiresAuth: true
    }
]

页面标题:

router.beforeEach((to,from,next)=>{
    console.log('router.beforeEach---')
    console.log('to=',to)
    console.log('from=',from)
    //路由发生变化修改页面title
    //document.title = to.meta.title || 'Default Title';
    if(to.meta.title){
        document.title = to.meta.title;
    }
    next()
})

权限验证:

路由

export default [
    {
        path:'/',
        name:"Index",
        component: { render: () => h(resolveComponent("router-view")) },
        redirect:'/',
        meta:{
        	 title:"主页",
             requiresAuth: true
        }
    }
]

路由守卫

router.beforeEach((to, from, next) => {
  if (to.meta.requiresAuth && !isUserAuthenticated()) {
    next('/login');
  } else {
    next();
  }
});

验证token

// 实际应用中应该替换为真实的权限验证逻辑
function isUserAuthenticated() {
  return Boolean(localStorage.getItem('userToken'));
}
  • 通过meta对象中的requiresAuth字段,可以在导航守卫中判断用户是否有权限访问某个页面,官网页面中有些需要登录才能看到的页面+需要宣传无需登录的页面。

缓存控制:

keepAlive

export default [
    {
        path:'/',
        name:"Index",
        component: { render: () => h(resolveComponent("router-view")) },
        redirect:'/',
        meta:{
        	 title:"主页",
             requiresAuth: true,
             keepAlive: true
        }
    }
]
  • 可以通过meta对象中的keepAlive字段控制组件是否需要被缓存

面包屑导航:

breadcrumb

export default [
    {
        path:'/',
        name:"Index",
        component: { render: () => h(resolveComponent("router-view")) },
        redirect:'/',
        meta:{
        	 title:"主页",
             requiresAuth: true,
             keepAlive: true,
             breadcrumb: 'Home'
        }
    }
]


动画效果:

export default [
    {
        path:'/',
        name:"Index",
        component: { render: () => h(resolveComponent("router-view")) },
        redirect:'/',
        meta:{
        	 title:"主页",
             requiresAuth: true,
             keepAlive: true,
             breadcrumb: 'Home',
             transition: 'fade'
        }
    }
]
  • 通过meta对象中的transition字段可以控制页面切换时的动画效果。


国际化支持:

export default [
    {
        path:'/',
        name:"Index",
        component: { render: () => h(resolveComponent("router-view")) },
        redirect:'/',
        meta:{
        	 title:"主页",
             requiresAuth: true,
             keepAlive: true,
             breadcrumb: 'Home',
             transition: 'fade',
             i18n: 'homePage'
        }
    }
]
router.beforeEach((to, from, next) => {
  const titleKey = to.meta.i18n;
  document.title = i18n.t(titleKey);
  next();
});