VUE2.0 学习(二十九)路由router,一篇文章讲清楚vue关于路由的所有东西

本文详细介绍了Vue Router的基本概念、组件间传参的props方法、路由链接的replace属性,以及编程式导航、生命周期钩子、全局和组件内守卫的实战应用。涵盖了history和hash模式的区别,帮助读者理解和实践Vue路由的高级特性。

router概念

在这里插入图片描述

使用路由

安装注册

在这里插入图片描述
在这里插入图片描述

创建两个组件

在这里插入图片描述

App组件

在这里插入图片描述

路由配置

创建文件,专门写路由

在这里插入图片描述
文件里面的东西

在这里插入图片描述

子组件路由

在这里插入图片描述

总结

组件来源切换,就是组件的挂载 和 销毁。

在这里插入图片描述

路由传参

组价里面传参
在这里插入图片描述
跳转到的页面如何接收参数

在这里插入图片描述

命名路由

在这里插入图片描述
在这里插入图片描述

params 参数

在这里插入图片描述
用这个参数进行传参

在这里插入图片描述
在这里插入图片描述

如何接收参数

如果传过来很多的参数,我们首先想到的就是这样进行接收

在这里插入图片描述
代码冗余了

如何简化,路由里面用props属性进行配置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

children:[
{
name:'xiangqing',
path:'detail',
component:Detail,

//props的第一种写法,值为对象,该对象中的所有key-value都
会以props的形式传给Detail组件。
// props:{a:1,b:'hello'}

//props的第二种写法,值为布尔值,若布尔值为真,
就会把该路由组件收到的所有params参数,以props的形式传给Detail组件。
// props:true

//props的第三种写法,值为函数
props($route){
	return {
		id:$route.query.id,
		title:$route.query.title,
		a:1,
		b:'hello'
	}
}

在这里插入图片描述

router-link的replace属性

在这里插入图片描述
开启了之后,浏览器就不能后退了
在这里插入图片描述

编程式路由导航

不使用 这个标签 <router-link 实现页面的跳转

push

点击一个按钮,调用下面的方法,进行组件的跳转

保留历史记录

pushShow(m){
				this.$router.push({
					name:'xiangqing', 跳转到这个名字的路由
					query:{   传的参数
						id:m.id,
						title:m.title
					}
				})
			},

replace

不保留历史记录
点击一个按钮,调用下面的方法,进行组件的跳转

	replaceShow(m){
				this.$router.replace({
					name:'xiangqing', 跳转到这个名字的路由
					query:{传的参数
						id:m.id,
						title:m.title
					}
				})
			}
		},

缓冲路由组件

在这里插入图片描述

路由身上的特有的生命钩子函数

原来我们经常写的是这一对。
monted 里面写进这个页面就调用里面的东西
另一个是离开这个组件就调用里面的东西
在这里插入图片描述
现在学路由身上特有的两个生命钩子

	activated() {
			console.log('News组件被激活了')
			this.timer = setInterval(() => {
				console.log('@')
				this.opacity -= 0.01
				if(this.opacity <= 0) this.opacity = 1
			},16)
		},
		deactivated() {
			console.log('News组件失活了')
			clearInterval(this.timer)
		},

在这里插入图片描述

全局路由守卫(权限)

在这里插入图片描述
meta 这个属性里面 就是程序员自己写的自定义的 一些东西


//全局前置路由守卫————初始化的时候被调用、每次路由切换之前被调用
router.beforeEach((to,from,next)=>{

// 参数 from  to 是路由的全部信息
	console.log('前置路由守卫',to,from)
	if(to.meta.isAuth){ //判断是否需要鉴权
		if(localStorage.getItem('school')==='jing'){
			next()//放行
		}else{
			alert('学校名不对,无权限查看!')
		}
	}else{
		next()  //放行
	}
})


//全局后置路由守卫————初始化的时候被调用、每次路由切换之后被调用

改变浏览器页签的title
router.afterEach((to,from)=>{
	console.log('后置路由守卫',to,from)
	document.title = to.meta.title || '系统'
})

页签
在这里插入图片描述

独享路由守卫

只是对新闻这个路由进行权限限制
在这里插入图片描述

他是没有后卫的

组件内路由守卫

在这里插入图片描述

//通过路由规则,进入该组件时被调用
		beforeRouteEnter (to, from, next) {
			console.log('About--beforeRouteEnter',to,from)
			if(to.meta.isAuth){ //判断是否需要鉴权
				if(localStorage.getItem('school')==='jing'){
					next()
				}else{
					alert('学校名不对,无权限查看!')
				}
			}else{
				next()
			}
		},

		//通过路由规则,离开该组件时被调用
		beforeRouteLeave (to, from, next) {
			console.log('About--beforeRouteLeave',to,from)
			next()
		}

history 模式

在这里插入图片描述

hash模式

在这里插入图片描述
#后面的就不会传给服务器,这个模式就是hash模式,默认的就是这个模式

<think>好的,用户问的是“vue跳转路由不记录”,我需要解释清楚在Vue中如何实现路由跳转时不记录到浏览历史中。首先,应该想到Vue Router的replace方法,因为它替换当前历史记录而不是添加新的。 接下来要确定用户可能的使用场景,比如登录后跳转首页,不希望用户返回登录页。这时候用router.replace比较合适。需要对比push和replace的区别,强调replace不会留下历史记录。 用户可能对replace的用法不太清楚,所以需要给出具体的代码示例,比如字符串路径和对象配置两种方式。还要提到编程式导航和声明式导航(<router-link>)的不同用法。 另外,用户可能关心相关的注意事项,比如浏览器兼容性、SEO影响等,虽然问题中没有提到,但提前说明这些可以更全面地帮助用户。还要提到可能的陷阱,比如表单未保存时使用replace可能导致无法返回,但用户之前的问题已经涉及,这里可以简单带过。 需要检查是否有其他相关方法或API,但确认Vue Router中主要是replace方法。确保回答结构清晰,先介绍replace的作用,再讲使用方式,然后场景和注意事项,最后对比push,这样用户能逐步理解。 还要注意用户可能是刚学习Vue Router的新手,所以语言要简洁明了,避免过于技术化的术语,用例子帮助理解。最后看看是否需要补充相关问题,但用户之前已经问过,这里可能不需要,保持回答的专注。</think>在 Vue.js 中,**跳转路由但不记录到浏览器历史栈**的核心方法是使用 `$router.replace()`,其本质是**用目标路由替换当前历史记录**(而非新增)。以下是具体实现方式和应用场景: --- ### 一、实现方式 #### 1. 编程式导航(代码中调用) ```javascript // 字符串路径格式 this.$router.replace('/target-path'); // 对象格式(支持路径名、参数、查询参数等) this.$router.replace({ name: 'TargetRouteName', params: { id: 1 }, query: { search: 'vue' } }); ``` #### 2. 声明式导航(模板中通过 `<router-link>`) 在模板中使用 `replace` 属性: ```html <router-link :to="{ path: '/target' }" replace>跳转不记录历史</router-link> ``` --- ### 二、适用场景 1. **登录/注册后跳转首页** 用户完成登录后,直接替换当前路由,避免按“返回”按钮时回到登录页(提升安全性)。 2. **向导流程结束后** 多步骤表单提交完成后,替换到结果页,防止用户回退重复提交。 3. **错误页重定向** 例如从 404 页面跳转回首页时,避免留下无效的历史记录。 --- ### 三、注意事项 1. **浏览器兼容性** `replace` 方法依赖 HTML5 History API,在旧版浏览器(如 IE9)中会自动回退为 `hash` 模式。 2. **与 `push` 的对比** ```javascript this.$router.push('/page'); // 新增历史记录(可后退) this.$router.replace('/page'); // 替换当前记录(不可后退) ``` 3. **表单未保存场景** 若当前页面有未保存数据,直接调用 `replace` 会导致用户无法通过“返回”恢复数据,需通过路由守卫(如 `beforeRouteLeave`)拦截并提示用户。 --- ### 四、扩展:路由守卫中的特殊处理 在需要动态控制是否记录历史的场景中,可通过路由守卫的 `next` 方法实现: ```javascript beforeRouteLeave(to, from, next) { if (this.isDataSaved) { next(); // 正常跳转(默认记录历史) } else { next({ ...to, replace: true }); // 强制替换跳转(不记录历史) } } ``` --- 通过 `replace` 方法,开发者可以灵活控制用户导航行为,适用于需要“无痕跳转”的场景。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一写代码就开心

你的打赏将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值