前端路由里的meta

前端做了这么久,路由也是天天打交道,今天不讲大方向的路由了,只讲讲路由配置里面的meta,这个时常被人忽略但又常常在我们视线里的部分,也是因为我发现好像并没有人去特别的关注这一块。

 首先,我们围绕meta,提出几个问题再一 一根据这些去了解和使用meta

meta是什么?

meta为什么要存在?

meta怎么使用?

meta可以自定义吗?

meta的属性配置和使用场景?

那么,好的,有了这些问题,思路就清晰了很多,下面本喵就逐一解答喽

meta是什么?

是用来存储路由相关的一些额外信息。您可以把它理解为附加在路由上的标签或属性,这些标签或属性对应的信息可以在路由守卫、组件等地方被访问和利用。

简单来说就是在使用路由时,你想要进行的属性配置,另外我们也称meta为路由元信息。

meta为什么要存在?

了解是什么的概念之后,这个问题就很好理解了,因为我们需要在路由使用时完成更多的需求。

meta怎么使用? 

最直接的使用方法就是写在路由配置里

routes: [
    {
      path: '/foo',
      component: Foo,
      children: [
        {
          path: 'bar',
          component: Bar,
          // a meta field
          meta: { requiresAuth: true }
        }
      ]
    }
  ]

直接像这样,我们只需要明白属性配置的含义即可

 另外,我还想要提的一点是,路由里的meta是如何访问的,我们配置完属性之后,那应该如何生效呢?

首先,我们称呼 routes 配置中的每个路由对象为 路由记录。路由记录可以是嵌套的,因此,当一个路由匹配成功后,他可能匹配多个路由记录

例如,根据上面的路由配置,/foo/bar 这个 URL 将会匹配父路由记录以及子路由记录。

一个路由匹配到的所有路由记录会暴露为 $route 对象 (还有在导航守卫中的路由对象) 的 $route.matched 数组。因此,我们需要遍历 $route.matched 来检查路由记录中的 meta 字段。

下面例子展示在全局导航守卫中检查元字段:

router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    // this route requires auth, check if logged in
    // if not, redirect to login page.
    if (!auth.loggedIn()) {
      next({
        path: '/login',
        query: { redirect: to.fullPath }
      })
    } else {
      next()
    }
  } else {
    next() // 确保一定要调用 next()
  }
})

 

 meta可以自定义吗?

可以的,上面也说到了它的定义,就是一种附加的属性配置,还有它的访问方法,那么自然就是可以自定义的,只不过,我们在使用除了路由元信息自带的属性之外,自定义的属性需要我们自己去设置如何使用。下面举例(只以noNeedLogin为例,请注意):

 

{

    path: '/login',

    name: 'Login',

    component: () => import('@/pages/Login'),

    meta: {

      hideHeader: true,

      trust: true,

      noNeedLogin: true  //自定义名称noNeedLogin

    }

  },

 

router.beforeEach(async (to, from, next) => {

  NProgress.start() //进度条效果,这里不用管

  // 检测是否需要用户登录验证

  if(to.meta.noNeedLogin){  //这里使用

    next()

    return;

  }else{

        需要登录并且需要拦截

 }

})

 

 

 meta的属性配置和使用场景?

到这里大家也发现了,其实meta定义还是使用,都不难,但是属性还是挺多的,为了让大家使用方便,在这里列一下

  1. title:用于设置页面的标题,可以在浏览器的标签页或页面导航中显示。

  2. description:用于描述页面的内容或功能,可以在搜索引擎的搜索结果中显示。

  3. keywords:用于标识页面的关键字,可以在搜索引擎的搜索结果中显示。

  4. icon:用于指定页面的图标,可以在浏览器的标签页中显示。

  5. requiresAuth:用于标识页面是否需要登录或鉴权才能访问。

  6. breadcrumb:用于设置页面的面包屑导航,可以提供更好的页面导航和用户体验。

  7. layout:用于指定页面的布局组件,可以根据不同的路由设置不同的布局。

  8. roles:用于指定页面所需的用户角色,可以在权限控制中使用。

  9. cache:用于标识页面是否需要缓存,以便提高页面的加载速度。

  10. hidden:用于标识页面是否需要在菜单或导航中隐藏。

  11. og:title:用于设置网页在社交媒体平台(如Facebook、Twitter)上的分享标题。

  12. og:description:用于设置网页在社交媒体平台上的分享描述。

  13. og:image:用于设置网页在社交媒体平台上的分享图片。

  14. og:url:用于设置网页在社交媒体平台上的分享链接。

  15. canonical:用于指定网页的主要URL,避免重复内容或URL。

  16. prefetch:用于指定页面加载前预取资源,提前加载页面所需的其他资源,以提高页面访问速度。

  17. transition:用于设置页面过渡效果,以提供更流畅的页面切换效果。

  18. pageClass:用于指定页面的自定义类名,可以用于针对页面样式的定制。

  19. keepAlive:用于标识页面是否需要保持存活状态,以便在路由切换时缓存页面。

  20. beforeEnter:用于指定路由进入前的钩子函数,在进入页面之前执行一些特定的操作。

  21. beforeLeave:用于指定路由离开前的钩子函数,在离开页面之前执行一些特定的操作。

  22. scrollToTop:用于标识路由切换是否需要滚动到页面顶部。

  23. queryParams:用于在路由之间传递查询参数,可以在路由间做某些状态的传递。

  24. transitionDelay:用于设置页面切换动画的延迟时间。

  25. metaTags:用于指定页面的自定义meta标签

  26. permission:用于设置页面访问权限,控制用户是否有权访问该页面。

  27. activeTab:用于指定页面加载后默认显示的选项卡或标签页。

  28. scrollBehavior:用于设置路由切换时页面的滚动行为,如滚动到指定位置或禁用滚动等。

  29. pageKey:用于标识页面的唯一key,在路由切换时辅助缓存或重新渲染页面。

  30. navTitle:用于指定页面在导航栏中的显示标题。

  31. hideNav:用于标识页面是否隐藏导航栏。

  32. hideFooter:用于标识页面是否隐藏页脚。

  33. isMobile:用于指定页面的设备类型,以便在响应式设计中做特定样式或布局调整。

就先列这些吧,这些是前端路由中常见的元数据属性,可以根据具体开发需求选择适用的属性进行配置和管理。同时,一些框架或库也可能提供了自定义的元数据属性,开发者可以根据实际情况进行扩展和定制。

至于使用场景,可以在路由拦截器里使用,也可以在页面里使用,和路由相关的可以自行考量,用处还是不少的。

相信了解完这些,就足够我们在日常开发中合理有效的使用,要想用得好,还是得多用,哈哈哈

今天的分享就到这里喽,咱们下期见嗷~

  • 27
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值