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 动态生成拓扑图的示例
Jan 03 Vue.js
vue动态设置路由权限的主要思路
Jan 13 Vue.js
如何在Vue项目中添加接口监听遮罩
Jan 25 Vue.js
vue 组件基础知识总结
Jan 26 Vue.js
如何使用RoughViz可视化Vue.js中的草绘图表
Jan 30 Vue.js
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
vue实现禁止浏览器记住密码功能的示例代码
Feb 03 Vue.js
vue-router懒加载的3种方式汇总
Feb 28 Vue.js
手写Vue2.0 数据劫持的示例
Mar 04 Vue.js
Vue-router编程式导航的两种实现代码
Mar 04 Vue.js
Vue全家桶入门基础教程
May 14 Vue.js
Vue如何实现组件间通信
May 15 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制作静态网站的模板框架(四)
2006/10/09 PHP
用php获取远程图片并把它保存到本地的代码
2008/04/07 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
2016/05/18 PHP
Javascript实现的类似Google的Div拖动效果代码
2011/08/09 Javascript
jquery(live)中File input的change方法只起一次作用的解决办法
2011/10/21 Javascript
复选框全选与全不选操作实现思路
2013/08/18 Javascript
JavaScript异步编程Promise模式的6个特性
2014/04/03 Javascript
JavaScript常用基础知识强化学习
2015/12/09 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
Bootstrap表单Form全面解析
2016/06/13 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
2016/11/15 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
AngularJS 霸道的过滤器小结
2017/04/26 Javascript
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
初学者AngularJS的环境搭建过程
2017/10/27 Javascript
使用vue打包时vendor文件过大或者是app.js文件很大的问题
2018/06/29 Javascript
详解angular应用容器化部署
2018/08/14 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
对angularJs中2种自定义服务的实例讲解
2018/09/30 Javascript
使用vue-router切换页面时实现设置过渡动画
2019/10/31 Javascript
Node.js API详解之 assert模块用法实例分析
2020/05/26 Javascript
vue 组件基础知识总结
2021/01/26 Vue.js
python求素数示例分享
2014/02/16 Python
matplotlib设置legend图例代码示例
2017/12/19 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
html5使用canvas画空心圆与实心圆
2014/12/15 HTML / CSS
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
美国网上眼镜供应商:LEOTONY(眼镜、RX太阳镜和太阳镜)
2017/10/31 全球购物
俄罗斯最大的在线手表商店:Bestwatch.ru
2020/01/11 全球购物
卖房协议书
2014/04/11 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书
2019思想汇报范文
2019/05/21 职场文书
redis缓存存储Session原理机制
2021/11/20 Redis