这篇文章主要介绍”vue怎么打开新窗口并实现传参的图文”,在日常操作中,相信很多人在vue怎么打开新窗口并实现传参的图文问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“vue怎么打开新窗口并实现传参的图文”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
我要实现的功能是打开一个新窗口用来展示新页面,而且需要传参数,并且参数不能显示在地址栏里面,而且当我刷新页面的时候,传过来的参数不能丢失,要一直存在,除非我手动关闭这个新窗口,即浏览器的标签页。
先把做好的代码写出来,后面再介绍别人实现不了的坑,以及这方面相关要注意的。
打开新窗口并传参代码
//打开新窗口并传参,参数不能显示在地址栏里面,不关闭窗口一直刷新,参数一直有效 handleWindow (), { ,//主要实现打开新窗口的功能 ,var route =,。美元router.resolve ({ ,名字:& # 39;xterm # 39; ,}) ,//主要实现存储参数的功能 ,sessionStorage.setItem (“ip",,“1.1.1.1"); , ,window.open (route.href, & # 39;平等# 39;) }
我的路由配置,也贴出来好了
{ ,路径:& # 39;/xterm # 39; ,隐藏:没错, 组件:大敌;(),=祝辞,进口(& # 39;@/视图/监控/xterm/指数# 39;), ,名字:& # 39;xterm # 39; },
现在是页面接收参数
//vue的初始化方法,页面一初始化,就去拿参数 创建(),{ ,警报(sessionStorage.getItem (“ip"));=,,this.ip  sessionStorage.getItem (“ip") },
贴个真相图
这是通过vue的打开新窗口,通过sessionStorage传参拿参数。为什么只能这么做,才能实现这个功能,下面我讲一下我的踩坑历程。群众里有坏的人,拿个假代码来网络上骗人,哪个码农经不起这样的考验?
首先这个功能需要打开新窗口,那么方式有如下3种;
第一种:通过<代码> & lt; router-link> 代码标签,这种标签的写法我个人很不中意,对于简单的业务场景还勉强可以,但是我要处理一堆业务,很多个参数的,这种标签的写法很不利于业务拓展。直接排除,出去!
第二种:通过<代码> router.replace 代码>方法,这种方法的打开窗口,是把当前一页面替换成要跳转过去的B页面,我打开新窗口是想看新东西,这倒好,直接让我之前的页面没了,这不操蛋嘛?在我实验过后,出去!
第三种:通过<代码> router.resolve 代码>方法,这就是打开新窗口,不影响当前一页面,直接打开一个浏览器标签页,我可以通过来回切换标签页,来看两个页面的信息数据。这很好,我中意,就是这个了。
顺带介绍一下,vue2.0以后,为了和日渐流行的HTML5保持一致,router.go和router.push就不支持新窗口打开的属性,路由器。会被用来当做前进后退了,路由器。将被用来当做导向特殊页面,这个跳转,不会打开新窗口,有历史功能,如果你一个窗口有多标签页的话,可以用这个来开多个,如图所示,
好了,使用路由器。决心,我们可以跳转到新窗口里,那么现在就开始传参了,这就到了坑爹的地方了。按照网上的搬运来看,主要是如下两种传参;
//测试第一种传参 testA (aaa), { ,const route =,。美元router.resolve ({ ,,,的名字:& # 39;xterm # 39;,, ,,,参数:{ ,,,,ip: aaa ,,} ,}) ,window.open (route.href & # 39;平等# 39;) }//测试第二种传参 testA (bbb), { ,const route =,。美元router.resolve ({ ,,,路径:& # 39;/xterm # 39;,, ,,,查询:{ ,,,,ip: bbb ,,} ,}) ,window.open (route.href & # 39;平等# 39;) }
对应的接收参数,如下所示,
创建(),{ ,//测试第一种接参 this.ip =,这。route.params.ip美元 ,//测试第二种接参 this.ip =,这。route.query.ip美元 },
测试的结果是,第一种永远拿不到值,第二种地址栏里暴露了传递的各项参数值。即使第一种经过种种特殊处理,最好的结果也只是第一次拿到值,再刷新一下页面,值就丢失了,这怎么行吗?谁能保证用户不会觉得有点卡,然后顺手去点了刷新按钮。这种在