vue打开新窗口并实现传参的图文实例


Posted in Vue.js onMarch 04, 2021

我要实现的功能是打开一个新窗口用来展示新页面,而且需要传参数,并且参数不能显示在地址栏里面,而且当我刷新页面的时候,传过来的参数不能丢失,要一直存在,除非我手动关闭这个新窗口,即浏览器的标签页。

通过面向百度编程,发现网上的根本达不到这个效果,而且还都是坑,明明实现不了,还若有其事的写出来,于是我在标题特意加上有图有真相,诚我不欺,实现不了功能,就不要出来糊弄人。

先把我做好的代码写出来,后面再介绍别人实现不了的坑,以及这方面相关要注意的。

打开新窗口并传参代码

//打开新窗口并传参,参数不能显示在地址栏里面,不关闭窗口一直刷新,参数一直有效
handleWindow() {
 //主要实现打开新窗口的功能
 var route = this.$router.resolve({
 name: 'Xterm',
 })
 //主要实现存储参数的功能
 sessionStorage.setItem("ip", "1.1.1.1");
 
 window.open(route.href, '_blank')
}

我的路由配置,也贴出来好了

{
 path: '/xterm',
 hidden: true,
 component: () => import('@/views/monitor/xterm/index'),
 name: 'Xterm',
},

现在是页面接收参数

//vue的初始化方法,页面一初始化,就去拿参数
created() {
 alert(sessionStorage.getItem("ip"));
 this.ip = sessionStorage.getItem("ip")
},

贴个真相图

vue打开新窗口并实现传参的图文实例

这是通过vue的 打开新窗口,通过sessionStorage传参拿参数。为什么只能这么做,才能实现这个功能,下面我讲一下我的踩坑历程。群众里有坏人,拿个假代码来网络上骗人,哪个码农经不起这样的考验?

首先这个功能需要打开新窗口,那么方式有如下3种;

第一种:通过<router-link>标签,这种标签的写法我个人很不中意,对于简单的业务场景还勉强可以,但是我要处理一堆业务,很多个参数的,这种标签的写法很不利于业务拓展。直接排除,OUT!

第二种:通过router.replace方法,这种方法的打开窗口,是把当前A页面替换成要跳转过去的B页面,我打开新窗口是想看新东西,这倒好,直接让我之前的页面没了,这不操蛋嘛?在我实验过后,OUT!

第三种:通过router.resolve方法,这就是打开新窗口,不影响当前A页面,直接打开一个浏览器标签页,我可以通过来回切换标签页,来看两个页面的信息数据。这很nice,我中意,就是这个了。

顺带介绍一下,vue2.0以后,为了和日渐流行的HTML5保持一致,router.go和router.push就不支持新窗口打开的属性,router.go被用来当做前进后退了; router.push被用来当做导向特殊页面, 这个跳转,不会打开新窗口,有history功能,如果你一个窗口有多标签页的话,可以用这个来开多个,如图所示;

vue打开新窗口并实现传参的图文实例

好了,使用router.resolve,我们可以跳转到新窗口里,那么现在就开始传参了,这就到了坑爹的地方了。按照网上的搬运来看,主要是如下两种传参;

//测试第一种传参
testA (aaa) {
 const route = this.$router.resolve({
   name: 'Xterm', 
   params: {
     ip: aaa
   }
 })
 window.open(route.href,'_blank')
}

//测试第二种传参
testA (bbb) {
 const route = this.$router.resolve({
   path: '/xterm', 
   query: {
     ip: bbb
   }
 })
 window.open(route.href,'_blank')
}

对应的接收参数,如下所示;

created() {
 //测试第一种接参
 this.ip = this.$route.params.ip
 //测试第二种接参
 this.ip = this.$route.query.ip
},

测试的结果是,第一种永远拿不到值,第二种地址栏里暴露了传递的各项参数值。即使第一种经过种种特殊处理,最好的结果也只是第一次拿到值,再刷新一下页面,值就丢失了,这怎么行?谁能保证用户不会觉得有点卡,然后顺手去点了刷新按钮。这种在router.push里面传参是一点问题都没有,都能接收到,区别就是name+params组合,参数不会在地址栏里面,刷新后数据会消失;path+query组合传参,参数会在地址栏里面,无论怎么刷新页面,值会一直在。估计是用push试了以后,理所当然的觉得resolve也一样,我看好多博客里写的不通过地址栏传参,使用第一种传参,然后压根成功不了,还点击量贼高,欲哭无泪啊。

没办法,只能自己动手了,找了找缓存啥的,发现localStorage 和 sessionStorage 属性,sessionStorage 用于临时保存数据,在关闭窗口或标签页之后将会删除这些数据;localStorage 用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去删除。显而易见,sessionStorage 就可以了。

支持这俩属性的浏览器版本如下所示;

vue打开新窗口并实现传参的图文实例

至此,其实问题就得到解决了,其实,也不复杂,就是网上答案良莠不齐,记录一下,以供他人使用。

总结

到此这篇关于vue打开新窗口并实现传参的文章就介绍到这了,更多相关vue打开新窗口传参内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
vue开发chrome插件,实现获取界面数据和保存到数据库功能
Dec 01 Vue.js
vue的hash值原理也是table切换实例代码
Dec 14 Vue.js
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
Dec 15 Vue.js
Vue ​v-model相关知识总结
Jan 28 Vue.js
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 Vue.js
如何在vue中使用video.js播放m3u8格式的视频
Feb 01 Vue.js
vue实现简单数据双向绑定
Apr 28 Vue.js
Vue3如何理解ref toRef和toRefs的区别
Feb 18 Vue.js
Vue3中toRef与toRefs的区别
Mar 24 Vue.js
vue route新窗口跳转页面并且携带与接收参数
Apr 10 Vue.js
vue使用localStorage持久性存储实现评论列表
Apr 14 Vue.js
如何vue使用el-table遍历循环表头和表体数据
Apr 26 Vue.js
Vue-router编程式导航的两种实现代码
Mar 04 #Vue.js
手写Vue2.0 数据劫持的示例
Mar 04 #Vue.js
vue3.0封装轮播图组件的步骤
Mar 04 #Vue.js
vue3.0 项目搭建和使用流程
Mar 04 #Vue.js
vue 数据双向绑定的实现方法
Mar 04 #Vue.js
vue3.0中使用element的完整步骤
Mar 04 #Vue.js
VUE实现吸底按钮
Mar 04 #Vue.js
You might like
PHP的ASP防火墙
2006/10/09 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
在JavaScript中使用timer示例
2014/05/08 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
javascript属性访问表达式用法分析
2015/04/25 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
2016/05/31 Javascript
vue-cli的webpack模板项目配置文件分析
2017/04/01 Javascript
Bootstrap Table使用整理(五)之分页组合查询
2017/06/09 Javascript
vue2 中如何实现动态表单增删改查实例
2017/06/09 Javascript
iscroll-probe实现下拉刷新和下拉加载效果
2017/06/28 Javascript
使用clipboard.js实现复制功能的示例代码
2017/10/16 Javascript
vue 路由页面之间实现用手指进行滑动的方法
2018/02/23 Javascript
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
微信小程序之自定义组件的实现代码(附源码)
2018/08/02 Javascript
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
2018/09/12 Javascript
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
Bootstrap FileInput实现图片上传功能
2021/01/28 Javascript
python sort、sorted高级排序技巧
2014/11/21 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
tensorflow获取变量维度信息
2018/03/10 Python
在pytorch中查看可训练参数的例子
2019/08/18 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
python实现对变位词的判断方法
2020/04/05 Python
Python持续监听文件变化代码实例
2020/07/22 Python
Under Armour安德玛德国官网:美国高端运动科技品牌
2019/03/09 全球购物
日语求职信范文
2013/12/17 职场文书
《九色鹿》教学反思
2014/02/27 职场文书
小学生期末评语大全
2014/04/21 职场文书
技术负责人任命书
2014/06/05 职场文书
单位活动策划方案
2014/08/17 职场文书
春季运动会开幕词
2015/01/28 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书
python tqdm用法及实例详解
2021/06/16 Python
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫