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 19 Vue.js
VUE项目实现主题切换的多种方法
Nov 26 Vue.js
vue实现表格合并功能
Dec 01 Vue.js
浅谈Vue使用Elementui修改默认的最快方法
Dec 05 Vue.js
vue中如何添加百度统计代码
Dec 19 Vue.js
vue 在单页面应用里使用二级套嵌路由
Dec 19 Vue.js
vue实现购物车的小练习
Dec 21 Vue.js
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
Vue+Bootstrap实现简易学生管理系统
Feb 09 Vue.js
如何理解Vue前后端数据交互与显示
May 10 Vue.js
Vue.js中v-for指令的用法介绍
Mar 13 Vue.js
vue项目proxyTable配置和部署服务器
Apr 14 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_Flame(Version:Progress)的原代码
2006/10/09 PHP
桌面中心(二)数据库写入
2006/10/09 PHP
PHP 设置MySQL连接字符集的方法
2011/01/02 PHP
php实现数组重复数字统计实例
2018/09/30 PHP
javascript vvorld 在线加密破解方法
2008/11/13 Javascript
一些相见恨晚的 JavaScript 技巧
2010/04/25 Javascript
JS重要知识点小结
2011/11/06 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
Node.js用readline模块实现输入输出
2016/12/16 Javascript
深入理解Node module模块
2018/03/26 Javascript
react高阶组件添加和删除props
2019/04/26 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
Python生成pdf文件的方法
2014/08/04 Python
python实现2048小游戏
2015/03/30 Python
python技能之数据导出excel的实例代码
2017/08/11 Python
python实现list由于numpy array的转换
2018/04/04 Python
python障碍式期权定价公式
2019/07/19 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
VSCode中自动为Python文件添加头部注释
2019/11/14 Python
python [:3] 实现提取数组中的数
2019/11/27 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
AUC计算方法与Python实现代码
2020/02/28 Python
selenium学习教程之定位以及切换frame(iframe)
2021/01/04 Python
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
Ever New美国:澳大利亚领先的女装时尚品牌
2019/11/28 全球购物
你们项目是如何进行变更控制的
2015/08/26 面试题
护理专业毕业生自我鉴定
2013/10/08 职场文书
法人代表证明书格式
2014/10/01 职场文书
2015年国际护士节演讲稿
2015/03/18 职场文书
堂吉诃德读书笔记
2015/06/30 职场文书
学习社交礼仪心得体会
2016/01/22 职场文书
详解MySQL 用户权限管理
2021/04/20 MySQL
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL
Golang获取List列表元素的四种方式
2022/04/20 Golang