vue项目开发中页面之间传递参数的方法

1.编程式导航(router.push)

使用方法:this.$router.push()
如果里边放的是字符串,直接跳到对应的路径
eg:this.$router.push("/Login")会直接跳到Login页面,这时候并不传递参数

1.1.命名路由(params)

使用方法:

//这里通过传一个对象,把路径和参数传到要跳转的页面
this.$router.push({
name:"Login",
params:{
	name:'gjl'
}
})

注意,看这种传参的名字我们都可以知道,这里用name来跳转路径,所以配置路由的时候一定要,对路由进行命名
再别的组件中使用传递过来的参数方法:this.$route.params.name

2024年3月14日修改:这种传参方式应该是已经废弃了!!
1.今天遇到一个警告bug:在这里插入图片描述

2.导航到当前页面看到相关的解释
在这里插入图片描述
3.解释链接:https://github.com/vuejs/router/blob/main/packages/router/CHANGELOG.md#414-2022-08-22
防止误导后来人,所以解释一下!!!

1.2.查询路由(query)

使用方法:

this.$router.push({
path:"/Login",
//这里传的是一个对象
query:{
	name:'gjl',
	age:20,
	height:1.77
}
})

注意:这里路径一定要写成path,另外query可以是我们组件data中定义好的数据
再别的组件中使用传递过来参数的方法:this.$route.query.name(age/height)

2.声明式导航(router-link)

2.1.命名路由(params)

这种方法是通过动态路由传参实现的
使用方法:
1.配置动态路由,在路由的index.js文件中这样配置路由

{
	path:"/Login/:id",//在正常路由后边加上需要传递的参数值
	name:"Login",
	component:Login
}

2.在需要传递参数的页面这样写:<router-link :to="{path:"'/Login/'+id"}"
这里的id我们先在data里边定义好,必须和1中配置的相对应
3.在接受参数的页面使用this.$route.params.id 获取传递过来的值
格式:直接在路由后边拼接,…/Login/id

2.2.查询路由(query)

使用方法:
1.直接正常的在index.js文件中配置路由
2.在需要传参的页面里使用<router-link :to=“{path:'/Login',query:{ name:'lh', age:12,height:1.88}}”
3.在接受参数的页面使用this.$route.query.name
路由格式:…/Login?name=lh&age=12&height=1.88

**通过练习观察发现**
编程式的命名路由传参是不会在url上暴露参数值的,就是我上边写的1.1

3.总线传值(bus)

bus属于vue中的总线机制,我们也可以使用它来进行传值,它进行兄弟之间的传值就很方便,当然非父子组件之间的通信使用vuex也会更方便
bus的使用只需要三步
1.在main.js中new一个Vue对象,并挂载到Vue原型上边,既$bus Vue.prototype.$bus=new Vue()
2.在需要传值的组件中使用 this.$bus.$emit()方法发送需要传的值,第一个参数是一个唯一标识,第二个参数是要传的数据(不限类型) this.$bus.$emit('statusTableId',id)
3.在需要接收数据的组件中,在钩子函数中(mounted/created..)中编写接受方法,即使用this.$bus.$on()方法,第一个参数是唯一标识(key)需要和第二步中的唯一标识一致,第二个参数是一个回调函数,res是传过来的值
使用bus进行父子组件传值的时候,可以把第2,3步的方法编写在mounted和created里边,第三步使用{{}}对传过来的数据进行展示 的时候没有什么问题
当我使用bus进行兄弟组件传值的时候,并没有那么顺利的在第3步展示出来传过来的值 ,这是一个坑!!!
和组件的生命周期有关,我这里直说使用方法:

//在需要传值的组件中,把代码编写在这样一个钩子函数里
beforeDestroy(){
   //console.log('a destory');
   this.$bus.$emit('o',this.id)
 }
 //这个时候,你就可以在接受值的组建中在created/mounted里边
 //编写代码了,当然使用{{}}也能正常展示了

4.写在最后

个人学习总结,欢迎指正!

  • 10
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Vue 项目,当我们使用 Vue Router 创建了带有路由参数的页面,并将项目打包后,如果我们在页面刷新时发现路由参数消失了。这是因为在打包后的项目Vue Router 将路由参数创建为前端路由,在刷新页面时,浏览器会向服务器发送请求获取页面,而服务器只返回打包后的静态文件,没有保存路由参数的信息。 为了解决这个问题,我们可以使用一些方法来保存并恢复路由参数。一种常见的方法是使用服务端渲染 (SSR)。通过 SSR,我们可以在服务器端将路由参数一同传递给浏览器,以便在页面刷新时能够恢复参数。但是,SSR 需要特殊的设置和服务器支持,并且会增加项目的复杂性和开发难度。 另一种方法是使用浏览器的本地存储机制,如 localStorage 或 sessionStorage。在页面加载时,我们可以将路由参数存储在本地存储,然后在页面刷新后,通过读取本地存储的参数来恢复。这种方法相对简单,但需要我们手动管理本地存储的数据,以确保数据的正确性和安全性。 除了以上两种方法,还可以考虑使用 URL 查询参数来保存路由参数。在页面加载时,我们可以通过读取 URL 查询参数来获取路由参数,并在刷新页面时,将参数添加到 URL 以便浏览器重新获取。这个方法相对简单,但会在 URL 上暴露参数,可能对用户体验和安全性产生影响,需要谨慎使用。 综上所述,当 Vue 项目打包后,在页面刷新时路由参数会消失,我们可以考虑使用 SSR、浏览器本地存储或 URL 查询参数来保存和恢复路由参数。根据项目的需求和实际情况,选择最合适的方法来解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值