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实现下载文件流完整前后端代码
Nov 17 Vue.js
Vue与React的区别和优势对比
Dec 18 Vue.js
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
Jan 13 Vue.js
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 Vue.js
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 Vue.js
vue集成一个支持图片缩放拖拽的富文本编辑器
Jan 29 Vue.js
详解vue中v-for的key唯一性
May 15 Vue.js
vue实现锚点定位功能
Jun 29 Vue.js
vue配置型表格基于el-table拓展之table-plus组件
Apr 12 Vue.js
vue使用localStorage持久性存储实现评论列表
Apr 14 Vue.js
vue @click.native 绑定原生点击事件
Apr 22 Vue.js
解决vue自定义组件@click点击失效问题
Apr 30 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
通过table标签,PHP输出EXCEL的实现方法
2013/07/24 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
PHP中的traits实现代码复用使用实例
2015/05/13 PHP
php上传大文件设置方法
2016/04/14 PHP
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
2007/03/12 Javascript
jQuery选择头像并实时显示的代码
2010/06/27 Javascript
扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路
2013/05/17 Javascript
jQuery Animation实现CSS3动画示例介绍
2013/08/14 Javascript
Jquery实现仿腾讯微博发表广播
2014/11/17 Javascript
Javascript中arguments和arguments.callee的区别浅析
2015/04/24 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
2016/03/04 Javascript
轻松掌握JavaScript策略模式
2016/08/25 Javascript
JS中跨页面调用变量和函数的方法(例如a.js 和 b.js中互相调用)
2016/11/01 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
JavaScript控制浏览器全屏显示简单示例
2018/07/05 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
2018/07/10 Javascript
对vue 键盘回车事件的实例讲解
2018/08/25 Javascript
Vue.js的动态组件模板的实现
2018/11/26 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
js序列化和反序列化的使用讲解
2019/01/19 Javascript
详解Vue之父子组件传值
2019/04/01 Javascript
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
用smtplib和email封装python发送邮件模块类分享
2014/02/17 Python
python中的代码编码格式转换问题
2015/06/10 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
3种python调用其他脚本的方法
2020/01/06 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
印尼最大的网上书店:Gramedia.com
2018/09/13 全球购物
应届生.NET方向面试题
2015/05/23 面试题
周年庆典主持词
2014/04/02 职场文书
担保贷款承诺书
2015/04/30 职场文书
2015年预算员工作总结
2015/05/14 职场文书
百年孤独读书笔记
2015/06/29 职场文书
先进个人主要事迹怎么写
2015/11/04 职场文书
同学会演讲稿
2019/04/02 职场文书
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
2021/03/30 HTML / CSS