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

2022年7月3日13:13:38

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方法也可以传replacethis.$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.sitelet 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 后面就是搭配路由的名称就能获取到参数的值
  • 作者:Pi皮蛋儿
  • 原文链接:https://blog.csdn.net/weixin_50723416/article/details/119531773
    更新时间:2022年7月3日13:13:38 ,共 2037 字。