vue router带参数页面刷新或回退参数消失的解决方法


Posted in Javascript onFebruary 27, 2019

写在前面:

传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题。有需要的朋友可以做一下参考,喜欢的可以点波赞,或者关注一下,希望可以帮到大家。

Vue router如何传参

params、query是什么?

params:/router1/:id ,/router1/123,/router1/789 ,这里的id叫做params

query:/router1?id=123 ,/router1?id=456 ,这里的id叫做query。

路由界面:

router.js:

路由设置这里,当你使用params方法传参的时候,要在路由后面加参数名,并且传参的时候,参数名要跟路由后面设置的参数名对应。使用query方法,就没有这种限制,直接在跳转里面用就可以。

vue router带参数页面刷新或回退参数消失的解决方法

注意:如果路由上面不写参数,也是可以传过去的,但不会在url上面显示出你的参数,并且当你跳到别的页面或者刷新页面的时候参数会丢失(如下图所示),那依赖这个参数的http请求或者其他操作就会失败。

vue router带参数页面刷新或回退参数消失的解决方法

注意看上面的路由参数,id这个参数是我们有设置在路由上面的,id2我没有设置在路由里面,所以刷新之后id2就不见了,在项目中,我们总不可能要求用户不能刷新吧。

组件1:

<template>
 <div class="app_page">
  <h1>从这个路由传参到别的路由</h1>
  <router-link :to="{ name:'router1',params: { id: status ,id2: status3},query: { queryId: status2 }}" >
   router-link跳转router1
  </router-link>
 </div>
</template>
<script>
export default {
 name: 'app_page',
 data () {
  return {
   status:110,
   status2:120,
   status3:119
  }
 },
}
</script>

编程式导航跳转:

上面的router-link传参,也可以使用router文档里面的编程式导航来跳转传参。

this.$router.push({ name:'router1',params: { id: status ,id2: status3},query: { queryId: status2 }});
//编程跳转写在一个函数里面,通过click等方法来触发

这两种传参效果是一模一样的,编程式导航,可以用来做判断跳转,比如是否授权,是否登录,等等状态,对此不太了解的小伙伴们,可以跳过这个编程式导航,以后再来看。

组件2:

<template>
 <div class="router1">
  <h1>接收参数的路由</h1>
  <h1> params.id:{{ $route.params }}</h1>
  <h1>query.status:{{ $route.query.queryId }}</h1>
  <keep-alive>
   <router-view></router-view>
  </keep-alive>
 </div>
</template>

传参还是比较简单的,按着上面组件的使用方法就可以成功传过去了。

提示:获取路由上面的参数,用的是$route,后面没有r。

params传参和query传参有什么区别:

vue router带参数页面刷新或回退参数消失的解决方法

1、params是路由的一部分,必须要有。query是拼接在url后面的参数,没有也没关系。

params一旦设置在路由,params就是路由的一部分,如果这个路由有params传参,但是在跳转的时候没有传这个参数,会导致跳转失败或者页面会没有内容。

比如:跳转/router1/:id

<router-link :to="{ name:'router1',params: { id: status}}" >正确</router-link>
<router-link :to="{ name:'router1',params: { id2: status}}">错误</router-link>

2、params、query不设置也可以传参,但是params不设置的时候,刷新页面或者返回参数会丢失,query并不会出现这种情况,这一点的在上面说过了

作者原话:首先我针对刷新参数消失想到的方法是在刚开始的时候将参数存到localStorage里面,但是如果这种传参比较多的话可能存储的地方会有点多;

然后再看一些博客的时候提到用vue 的<keep-alive>,即在<router-view>外套一层<keep-alive>实现页面缓存,但是这样确实是不是每一个页面都需要缓存的特别是一些状态之间切换需要流程化更改状态的页面,写上这个就不能实现数据的实时刷新了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript中的var_dump函数实现代码
Sep 07 Javascript
boxy基于jquery的弹出层对话框插件扩展应用 弹出层选择器
Nov 21 Javascript
js将json格式内容转换成对象的方法
Nov 01 Javascript
jQuery Form 页面表单提交的小例子
Nov 15 Javascript
JavaScript实现鼠标点击后层展开效果的方法
May 13 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
Sep 04 Javascript
AngularJS 日期格式化详解
Dec 23 Javascript
纯JavaScript基于notie.js插件实现消息提示特效
Jan 18 Javascript
Angular ng-class详解及实例代码
Sep 19 Javascript
web3.js增加eth.getRawTransactionByHash(txhash)方法步骤
Mar 15 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
Dec 13 Javascript
JavaScript实现4位随机验证码的生成
Jan 28 Javascript
react的滑动图片验证码组件的示例代码
Feb 27 #Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
Feb 27 #jQuery
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
Feb 27 #jQuery
spring+angular实现导出excel的实现代码
Feb 27 #Javascript
react native 原生模块桥接的简单说明小结
Feb 26 #Javascript
JavaScript实现获取两个排序数组的中位数算法示例
Feb 26 #Javascript
小程序hover-class点击态效果实现
Feb 26 #Javascript
You might like
计算一段日期内的周末天数的php代码(星期六,星期日总和)
2009/11/12 PHP
PHP include任意文件或URL介绍
2014/04/29 PHP
PHP之sprintf函数用法详解
2014/11/12 PHP
一个完整的php文件上传类实例讲解
2015/10/27 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
用javascript实现画板的代码
2007/09/05 Javascript
jQuery中slice()方法用法实例
2015/01/07 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
详解Vue监听数据变化原理
2017/03/08 Javascript
Vue2单一事件管理组件通信
2017/05/09 Javascript
详解使用mpvue开发github小程序总结
2018/07/25 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
用Node写一条配置环境的指令
2019/11/14 Javascript
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
Python命名空间详解
2014/08/18 Python
Python程序中使用SQLAlchemy时出现乱码的解决方案
2015/04/24 Python
在Django中管理Users和Permissions以及Groups的方法
2015/07/23 Python
基于asyncio 异步协程框架实现收集B站直播弹幕
2016/09/11 Python
Redis使用watch完成秒杀抢购功能的代码
2018/05/07 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
2019/06/28 Python
python快速编写单行注释多行注释的方法
2019/07/31 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
2019/08/12 Python
解决jupyter notebook显示不全出现框框或者乱码问题
2020/04/09 Python
详解Pytorch显存动态分配规律探索
2020/11/17 Python
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
html5中使用hotcss.js实现手机端自适配的方法
2020/04/23 HTML / CSS
Jacadi Paris英国官网:法国童装品牌
2019/08/09 全球购物
Servlet如何得到服务器的信息
2015/12/22 面试题
成人大专生实习期的自我评价
2013/10/02 职场文书
教师的实习鉴定
2013/12/15 职场文书
酒店个人求职信范文
2014/01/25 职场文书
无刑事犯罪记录证明
2014/09/18 职场文书
党的群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
药店采购员岗位职责
2014/09/30 职场文书
Mysql外键约束的创建与删除的使用
2022/03/03 MySQL