Vue 深入学习param和query两种传参方式及其区别
router文件下index.js里面,是这么定义路由的:{path:"/detail",name:"detail",component:home}1、传参方式query传参方式:query要用path来引入路由;this.$router.push({path: "/detail",query: {code:"123"}})param传参方式:param要用name来引入路由;this.$ro..
前言:
路由传参的时候,有俩兄弟,一个叫query,一个叫parmas;你说他们俩长得也不像吧,可这用法实在是太类似了。
下面就让我们从vue路由讲他们的区别
vue路由中的传参:
假设我们现在需要实现一个路由切换,点击之切换到W组件;并传递一个id值和一个age值
我们运用router-link来写。
然后一连串的疑惑就产生了
<router-link :to="{ A: 'xxx', query: { xx:'xxx' }}"/>
<router-link :to="{ A: 'xxx', parmas: { xx:'xxx' }}"/>
routes:{ ??? }
对于query和parmas来说:
- A用name还是path?
- routes要怎么写?
- url长什么样?
- 会有什么隐藏的坑么
### query ###
<router-link :to=``"{ name: 'W', query: { id:'1234',age:'12' }}"``/>`
`<router-link :to=``"{ path: '/W', query: { id:'1234',age:'12' }}"``/>
name和path都可以用
前者的routes基于name设置
{``path: ``'/hhhhhhh'``, ``//这里可以任意``name: ``'W'``, ``//这里必须是W``component: W``}
然后就把path匹配添加到url上去:
http:``//localhost:8080/#/hhhhhhh?id=1234&age=12
后者基于path来设置routes
{``path: ``'/W'``, ``//这里必须是W``name: ``'hhhhhhhh'``, ``//这里任意``component: W``}
url:http://localhost:8080/#/W?id=1234&age=12
这两种方法,都可以自定义path的样式,
不过一个是在router-link to里面定义,一个则是在routes里面定义
在接收参数的时候都是使用this.$route.query.id
### parmas ###
<router-link :to=``"{ name: 'W', params: { id:'1234',age:'12' }}"``/>
这里只能用name不能用path,不然会直接无视掉params中的内容
然后在routes中添加
{``path:``'/W/:id/:age'``,``name:``'W'``,``component:W``}
这里的name与上面router-link中的name保持一致;
url就取决于这个path的写法http://localhost:8080/#/W/1234/12;
注意:path里面的/w可以任意写,写成/hhhhh也可以
但是!
/:id和/:age不能省略,且不能改名字
不写的话,第一次点击可以实现组件跳转,且可以通过this.$route.parmas.id获取到传过来的id值,
但如果刷新页面,传过来的id值和age值就会丢失;
从这也能看出params比query严格;
上面query有代验证!!!!!!!!!!!
router文件下index.js里面,是这么定义路由的:
{
path:"/detail",
name:"detail",
component:home
}
1、传参方式
query传参方式:query要用path来引入路由;
this.$router.push({
path: "/detail",
query: {code:"123"}
})
param传参方式:param要用name来引入路由;
this.$router.puth({
name: "detail",
param: {code: "123"}
})
2、取值:
获取query传参的方式
this.$route.query.code //123
获取param 传参的方式
this.$route.param.code //123
3、区别:
1、用法上:
query要用path来引入,params要用name来引入,接收参数都是类似的,分别是this.$route.query.code和this.$route.params.code。
2、展示上:
query更加类似于我们ajax中get传参,params则类似于post,说的再简单一点,前者在浏览器地址栏中显示参数,后者则不显示;
query:
param:
或者:
使用query传参的方式类似于get交互,传的参数在路由中显示,可以用作刷新后仍然存在参数。
使用param传参的方式类似于post交互,传的参数不会出现在路由中,界面刷新后传参就不存在。
也就是说传参跳转页面时,query不需要再路由上配参数就能在新的页面获取到参数,使用params不在路由配参数跳转,只有第一次进入页面参数有效,刷新页面参数就会消失。
注意要点:query与param两种传参,最大区别是 传参方式不一样,传的参数是否能在路由中显示,能否刷新后仍然传参
更多推荐
所有评论(0)