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中通过render函数给子组件设置ref操作
Nov 17 Vue.js
vue监听滚动事件的方法
Dec 21 Vue.js
vue form表单post请求结合Servlet实现文件上传功能
Jan 22 Vue.js
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 Vue.js
解决vue项目本地启动时无法携带cookie的问题
Feb 06 Vue.js
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
Feb 11 Vue.js
WebStorm无法正确识别Vue3组合式API的解决方案
Feb 18 Vue.js
使用Vue.js和MJML创建响应式电子邮件
Mar 23 Vue.js
vue基于Teleport实现Modal组件
May 31 Vue.js
Vue中foreach数组与js中遍历数组的写法说明
Jun 05 Vue.js
vue cli4中mockjs在dev环境和build环境的配置详情
Apr 06 Vue.js
vue自定义右键菜单之全局实现
Apr 09 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与SQL注入攻击[三]
2007/04/17 PHP
thinkphp命名空间用法实例详解
2015/12/30 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
2016/03/05 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
2019/09/18 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
2020/11/27 PHP
JavaScript Event学习第六章 事件的访问
2010/02/07 Javascript
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
详解js闭包
2014/09/02 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
JavaScript电子时钟倒计时
2016/01/09 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
2016/05/17 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
JavaScript实现前端分页控件
2017/04/19 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
JavaScript实现AOP详解(面向切面编程,装饰者模式)
2017/12/19 Javascript
vuex操作state对象的实例代码
2018/04/25 Javascript
react 父子组件之间通讯props
2018/09/08 Javascript
利用React Router4实现的服务端直出渲染(SSR)
2019/01/07 Javascript
ES6入门教程之Array.from()方法
2019/03/23 Javascript
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
Vue包大小优化的实现(从1.72M到94K)
2021/02/18 Vue.js
Python代码调试的几种方法总结
2015/04/15 Python
python控制台中实现进度条功能
2015/11/10 Python
Python 基础知识之字符串处理
2017/01/06 Python
django页面跳转问题及注意事项
2019/07/18 Python
pytorch:model.train和model.eval用法及区别详解
2020/02/20 Python
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
波兰汽车配件网上商店:iParts.pl
2020/09/08 全球购物
酒店服务实习自我鉴定
2013/09/22 职场文书
期末总结的个人自我评价
2013/11/02 职场文书
面试后的英文感谢信
2014/02/01 职场文书
幼儿园运动会口号
2014/06/07 职场文书
保密工作整改情况汇报
2014/11/06 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书
PHP实现rar解压读取扩展包小结
2021/06/03 PHP