【Vue】vuecli导航守卫动态改变标题(title)

Vue-cli

是快速构建单页应用的脚手架,单页所以只有一个index.html入口,只有一个app实例。
但是我们做的项目中,每个页面的标题描述是不同的,又要改变title,所以这里就需要用到导航守卫

Vuecli搭建之类的这里就不详述了…
##导航守卫:
正如其名,vue-router 提供的导航守卫主要用来通过跳转取消的方式守卫导航。有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的。
记住参数或查询的改变并不会触发进入/离开的导航守卫。你可以通过观察 $route 对象来应对这些变化,或使用 beforeRouteUpdate的组件内守卫,里面的参数之类的后面会写到。


进入正题

下面这张图片就是那个唯一的index.html,我们目标是动态改变title标签中的内容
这里写图片描述
先看看没有加守卫导航的时候,地址不同title肯定是相同的。
地址:http://localhost:8080/#/login     这里写图片描述
地址:http://localhost:8080/#/apply     这里写图片描述

方法一

接下来开始修改title

1:先给title加上一个id【如上一张图片中的title】,后面需要用到这个id来指定这个标签,通过innerHTML来更改内容。

<title id="titleId">test</title>

2:进入router.js中,这里脚手架搭建的时候我就选中了默认安装router,有些同学可能是直接npm安装的,不过无大碍。
这里写图片描述
这里我们直接在路由配置上直接定义 beforeEnter 守卫,直接通过原生js获取到id的title标签改变里面的内容。
每个守卫方法接收三个参数:

  • to: Route: 即将要进入的目标 路由对象
  • from: Route: 当前导航正要离开的路由
  • next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。

next(): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。

next(false): 中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。

next(’/’) 或者 next({ path: ‘/’ }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。你可以向 next 传递任意位置对象,且允许设置诸如 replace: true、name: ‘home’ 之类的选项以及任何用在 router-link 的 to prop 或 router.push 中的选项。

next(error): (2.4.0+) 如果传入 next 的参数是一个 Error 实例,则导航会被终止且该错误会被传递给 router.onError() 注册过的回调。

确保要调用 next 方法,否则钩子就不会被 resolved。

最后看效果:
地址:http://localhost:8080/#/login     这里写图片描述
地址:http://localhost:8080/#/about     这里写图片描述

导航守卫还可以用作路由拦截等等操作,后面会发布。

方法二

routes: [
    {          /* (首页)默认路由地址 */
      path: '/',
      name: 'login',
      component: login,
      meta: {
        title: '首页入口'
      }
    },
    {         
      path: '/apply',
      name: 'apply',
      component: apply,
      meta: {
        title: '申请'
      }
    },
    { /* Not Found 路由,必须是最后一个路由 */
      path: '*',
      component: NotFound,
      meta: {
        title: '找不到页面'
      }
    }
  ]

最后在遍历

router.beforeEach((to, from, next) => {
  /* 路由发生变化修改页面title */
  if (to.meta.title) {
    document.title = to.meta.title
  }
  next()
})
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Vue 3中的组件路由导航守卫有三个状态:beforeRouteEnter、beforeRouteUpdate和beforeRouteLeave。\[1\]在组件内部,可以通过在methods中定义这些守卫函数来实现对应的功能。在beforeRouteEnter中,可以在渲染该组件的对应路由被确认之前执行一些操作。在beforeRouteUpdate中,可以在当前路由改变但是该组件被复用时执行一些操作。在beforeRouteLeave中,可以在导航离开该组件的对应路由时执行一些操作。\[3\] 另外,在路由配置文件router\index.js中,也可以使用全局的路由守卫函数来实现对应的功能。在beforeEach函数中,可以在每次路由跳转之前执行一些操作,比如打印跳转的目标路由信息。然后通过调用next()函数来继续跳转,或者通过返回false来禁止跳转。\[2\] 总结起来,Vue 3中的组件路由导航守卫可以通过在组件内部定义守卫函数或者在路由配置文件中使用全局的守卫函数来实现,在不同的守卫状态下执行对应的操作。 #### 引用[.reference_title] - *1* *2* [Vue——vue3路由导航守卫及其写法](https://blog.csdn.net/qq_43201350/article/details/127220103)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [vue路由导航守卫(全局守卫、路由独享守卫、组件内守卫)](https://blog.csdn.net/m0_64590669/article/details/129306681)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值