Vue中this.$router.replace和this.$router.push的区别

this.$router.push

  1. 跳转到指定URL,向history栈添加一个新的纪录,点击后退会返回至上一个页面。
  2. 声明式:< router-link :to = “…” >
  3. 编程式:< router.push(…) > // 该方法的参数可以是一个字符串路径,或者一个描述地址的对象。
// 字符串
this.$router.push('/index') 
// 对象
this.$router.push({path:'/index'})
// 带查询参数,变成/backend/order?selected=2/,query传参
this.$router.push({path:'/index', query:{name: '123'} })
// 命名的路由 params传参
this.$router.push({name:'index', params:{name: '123'} })

this.$router.replace

  1. 跳转到指定的URL,替换history栈中最后一个记录,点击后退会返回至上一个页面。(A----->B----->C 结果B被C替换 A----->C)
  2. 设置replace属性(默认值:false)的话,当点击时,会调用router.replace(),而不是router.push(),于是导航后不会留下history记录。即使点击返回按钮也不会回到这个页面。加上replace: true时,它不会向 history 添加新纪录,而是跟它的方法名一样——替换当前的history记录。
// 声明式
<reouter-link :to="..." replace></router-link>
// 编程式:
router.replace(...)
// push方法也可以传replace
this.$router.push({path: '/homo', replace: true})

两种传参方式

query:
	this.$router.push({
		path: '/home',
		query: {
			site: [],
			bu: []
		}
	})
params:
	this.$router.push({
		name: 'Home', // 路由名称
		params: {
			site: [],
			bu: []
		}
	})	
params: /router1/:id, /router1/123, /router1/789, 这里的id 叫做 params
query: /router1?id=123, /router?id=456, 这里的id 叫做 query

两者传参参数的区别

query 传递配置的时path,而params传递配置的是name,在params中配置path无效
query在路由配置不需要设置参数,而params必须设置
query传递的参数会显示在地址栏中
params传递刷新会无效,但是query会保存传递过来的值,刷新不变;

路由的配置

query:
	{
		path: '/home',
		name: Home,
		component: Home
	}
params:
	{
		path: '/home/:site/:bu',
		name: Home,
		component: Home
	}	

如果路由上面不写参数,也是可以传递过去的,但不会再URL上面显示出你的参数,并且当你跳转到别的页面或者刷新页面的时候参数会丢失,那依赖这个参数http请求或者其他操作就会失败

在接受跳转的页面获取路由参数

created(){
	let self = this
	self.getParams()
},
watch(){
'$router': 'getParams'
},
methods: {
	getParams(){
		let site = this.$route.query.site
		let bu = this.$route.query.bu
		// 如果是params传参,那就是this.$router.params.site
	}
}

**注意:获取路由上面的参数,用的是$route,后面没有 r **

  1. params是路由的一部分,必须要有。query是拼接在url后面的参数,没有也没关系。
  2. params一旦设置在路由,params就是路由的一部分,如果这个路由params传参,但是在跳转的时候没有传递这个参数,会导致跳转失败或者页面会没有内容。
  3. params、query不设置也可以传参,但是params不设置的时候,刷新页面或者返回参数会丢失,query并不会出现这种情况。

this.$router.go(n)

  1. 类似window.history.go(n),向前后向后跳转 n 个页面,n 可正(向后跳转)可负(向前跳转)
  2. this.$router.go(1) // 类似history.forward()
  3. this.$router.go(-1) // 类似history.back()

最后总结

路由传递参数和传统传递参数是一样的,命名路由类似表单提交而查询就是URL传递:

  1. 命名路由搭配params,刷新页面参数会丢失
  2. 查询参数搭配query,刷新页面数据不会丢失
  3. 接受参数使用this.$route 后面就是搭配路由的名称就能获取到参数的值
  • 24
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值