vue路由导航守卫动态改变标题

利用导航守卫beforeEach在每次页面跳转前更改对应的title

import Vue from 'vue'
import VueRouter from 'vue-router'
import Hologram from '../components/qxhx/Hologram.vue'
const routes = [
  {
    path: '/',
    name: 'Hologram',
    component: Hologram,
    /*1.在route里面给每个路由加上meta属性*/
  	meta: {
  		title: '标题1'
  	}
  }
]
const router = new VueRouter({
  routes
})
 
//2. 导航守卫
router.beforeEach((to, from, next) => {
	/* 路由发生变化修改页面title */
	if (to.meta.title) {
		document.title = to.meta.title
	}
	next()
})
 
export default router

### Vue.js 路由守卫使用指南 Vue.js 的路由守卫是用于在导航过程中执行逻辑的工具,可以帮助开发者控制页面之间的跳转行为。以下是关于 Vue.js 路由守卫的详细说明和代码示例。 #### 1. 全局前置守卫 (beforeEach) 全局前置守卫在每次路由跳转之前都会被调用,适用于检查用户权限或加载必要的数据。以下是一个典型的配置示例: ```javascript import Vue from 'vue'; import VueRouter from 'vue-router'; Vue.use(VueRouter); const routes = [ { path: '/dashboard', component: () => import('./components/Dashboard.vue') }, { path: '/', redirect: '/dashboard' } ]; const router = new VueRouter({ mode: 'history', routes }); // 添加全局前置守卫 router.beforeEach((to, from, next) => { const isLoggedIn = localStorage.getItem('user'); // 检查用户是否已登录 if (!isLoggedIn && to.path === '/dashboard') { next('/login'); // 如果未登录且试图访问仪表盘,则重定向到登录页 } else { next(); // 否则允许导航 } }); export default router; ``` 通过上述代码,可以确保用户在未登录的情况下无法直接访问 `/dashboard` 页面[^2]。 #### 2. 全局后置守卫 (afterEach) 全局后置守卫路由跳转完成后触发,通常用于记录日志或更改页面标题等操作。 ```javascript router.afterEach((to, from) => { document.title = to.meta.title || '默认标题'; // 修改页面标题 }); ``` #### 3. 路由独享守卫 (beforeEnter) 路由独享守卫定义在路由配置中,仅对特定路由生效。例如: ```javascript const routes = [ { path: '/about', component: () => import('./components/About.vue'), beforeEnter: (to, from, next) => { console.log('进入 About 页面'); next(); } } ]; ``` #### 4. 组件内守卫 组件内守卫包括 `beforeRouteEnter`、`beforeRouteLeave` 和 `beforeRouteUpdate`,分别用于在进入、离开和更新组件时执行逻辑。 - **beforeRouteEnter**:在进入组件之前调用,此时组件实例尚未创建。 - **beforeRouteLeave**:在离开组件之前调用,可用于提示用户确认离开。 - **beforeRouteUpdate**:在当前路由改变但组件复用时调用。 以下是一个完整的组件内守卫示例: ```javascript <template> <div> <h2>About组件</h2> </div> </template> <script> export default { name: 'About', beforeRouteEnter(to, from, next) { console.log('进入 About 页面'); next(); }, beforeRouteLeave(to, from, next) { const confirmLeave = window.confirm('确定要离开吗?'); if (confirmLeave) { next(); } else { next(false); } } }; </script> ``` ### 注意事项 - 在使用 `next()` 方法时,必须确保其被正确调用,否则会导致导航挂起[^1]。 - 组件内守卫中的 `this` 不可用,因此需要通过回调函数访问组件实例[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值