欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-29 09:15:02
...

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 后面就是搭配路由的名称就能获取到参数的值
相关标签: VUE vue