vue路由跳转打开新窗口(window.open())和关闭窗口(window.close())

目录
  • vue路由跳转打开新窗口和关闭窗口
    • 编程式导航
    • window.open( )方法
    • 关闭窗口 window.close()
  • vue路由跳转打开新窗口(被浏览器拦截)
    • 第一种方法
    • 第二种方法
    • 第二种方法(改良版)
  • 总结

vue路由跳转打开新窗口和关闭窗口

需求:从当前页面跳转到其他页面时,打开一个新窗口

比如:点击页面上的用户反馈,打开用户反馈的新页面,要使用编程式导航

编程式导航

使用路由对象的resolve的方法解析路由,可以得到location、router、href等目标路由的信息,只要得到href就可以使用window.open打开新窗口了。

代码如下:

    // 路由跳转新界面
    userFeedback() {
      // this.$router.push({ path: '/feedback' });
      用push,也能实现跳转,但是不能打开新页面。
      const { href } = this.$router.resolve({
        path: '/feedback'
      });
      window.open(href, '_blank');
    },

如果是复杂的需要带参数跳转的路由,是以下写法,用query携带参数

  <template slot-scope="scope">
    <el-button
      size="small"
      @click.stop="watchDetail(scope.row)">详情</el-button>
  </template>
 watchDetail(row) {
    const { href } = this.$router.resolve({
      path: `/answerSituation`,
      query: {
        id: row.id,
        paperName: this.paperName,
        name: row.name,
        examScore: row.examScore,
        answersTime: row.answersTime
      }
    });
    window.open(href, '_blank');
  }

window.open( )方法

定义和用法

open() 方法用于打开一个新的浏览器窗口或查找一个已命名的窗口。

语法

window.open(URL,name,specs,replace)

第一个参数URL

可选。打开指定的页面的URL。如果没有指定URL,打开一个新的空白窗口

第二个参数name

可选。指定target属性或窗口的名称。支持以下值:

  • _blank - 在新窗口显示目标网页。这是默认
  • _self - 在当前窗口显示目标网页
  • _top - 框架网页中在上部窗口中显示目标网页(不常用)

第三个参数

可选参数,设置窗口参数,各参数用逗号隔开。

关闭窗口 window.close()

用法

window.close();   //关闭本窗口
或者
<窗口对象>.close();   //关闭指定的窗口

例子:关闭新窗口

 var mywin=window.open('http://www.xxx.com'); //将新打的窗口对象,存储在变量mywin中
 mywin.close();

vue路由跳转打开新窗口(被浏览器拦截)

今天做了一个功能是点击按钮路由跳转打开新的窗口页面

第一种方法

<router-link target="_blank" :to="{path:'/FundManger/FundProductMoney',
query:{managerId:fundcode}}></router-link>"

第二种方法

  <a @click="getGetMyPortfolioById(scope.row) ">查看</a>

 getGetMyPortfolioById(vals) { 
    getMyPortfolioById({

    }).then(response = >{ 
        const routerdata = this.$router.resolve({ 
                  name: '组合分析以及组合持仓', 
                  params: { managerId: vals.fundCode } 
        }) 
        const newhref = routerdata.href + '?managerId=' + vals.fundCode 
         window.open(newhref, '_blank') 
    })
 } 

当我们用到第二种方法时候,是触发事件请求接口根据条件去判断在进行路由跳转,这个时候就会遇到浏览器被拦截的问题

在接口请求的回调函数中 需要使用window.open()打开新页面,但是等接口请求成功之后,window.open()打开新页面总是被浏览器拦截,原因大概是,放在请求回调函数中的操作,被浏览器认为不是用户主动触发的事件,并且延迟1000ms ,被认为有可能是广告,于是被拦截

解决的方法:

在接口请求之前先打开一个空的页面

let tempPage=window.open('' ", _blank');

然后在回调函数中,

tempPage.location=url;

第二种方法(改良版)

  <a @click="getGetMyPortfolioById(scope.row) ">查看</a>

  getGetMyPortfolioById(vals) {
      const tempPage = window.open('', '_blank')
      getMyPortfolioById({}).then(response = >{
             const routerdata = this.$router.resolve({
             name: '组合分析以及组合持仓',
                  params: {
                       managerId: vals.fundCode
                 }
               })
             const newhref = routerdata.href + '?managerId=' + vals.fundCode
             tempPage.location = newhref
      })
 }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 简述vue路由打开一个新的窗口的方法

    简单说一下vue路由如何打开一个新的窗口 1.router-link标签 在vue的官方文档中 看到这大家应该会想,既然router-link不支持target="_blank"属性,那我们该怎么用router-link打开一个新的窗口呢?别急,继续往下看~ 文档中还有一处描述 router-link添加tag="li"属性后,居然可以变成li标签渲染出来,真特么神奇哈,那可不可以写成tag="a",从而去替代a标签呢?我们尝试着写一哈 <

  • vue跳转页面打开新窗口,并携带与接收参数方式

    目录 1.携带普通类型参数 2.携带复杂类型参数 vue页面跳转并传参的八种方式 方法一 方法二 方法三 方法四 方法五 方法六 方法七 方法八 1.携带普通类型参数 字符串.数字等. path:要跳转新页面的路由链接 query:要携带的参数 let pathInfo = this.$router.resolve({   path:'/product_detail',      query:{          productId:'11'      }  })  window.open(pa

  • Vue 路由间跳转和新开窗口的方式(query、params)

    路由间跳转配置: query 方式 参数会在url中显示 this.$router.push({ // query方式 path: "/a", query: { projectDetails: val }, params 方式 传参数据不会在导航栏中显示,需要配合路由的name属性使用 // params 方式 name: 'a', params: { projectDetails: val } 新开页面 需要使用resolve配置 const {href} = this.$route

  • vue路由跳转打开新窗口(window.open())和关闭窗口(window.close())

    目录 vue路由跳转打开新窗口和关闭窗口 编程式导航 window.open( )方法 关闭窗口 window.close() vue路由跳转打开新窗口(被浏览器拦截) 第一种方法 第二种方法 第二种方法(改良版) 总结 vue路由跳转打开新窗口和关闭窗口 需求:从当前页面跳转到其他页面时,打开一个新窗口 比如:点击页面上的用户反馈,打开用户反馈的新页面,要使用编程式导航 编程式导航 使用路由对象的resolve的方法解析路由,可以得到location.router.href等目标路由的信息,只

  • vue 路由跳转打开新窗口被浏览器拦截问题处理

    触发事件请求接口根据条件去判断在进行路由跳转:   <a @click="getGetMyPortfolioById(scope.row) ">查看</a>    getGetMyPortfolioById(vals) {      getMyPortfolioById({       }).then(response = >{          const routerdata = this.$router.resolve({             

  • vue单页面应用打开新窗口显示跳转页面的实例

    一般单页面应用,例如vue都是通过vue-router来做跳转,不会像多页应用一样另起新页面显示,但是也不排除一些业务上的需要. 一般情况下单页面应用的路由跳转我们都是通过简单的一句话搞定: this.$router.push({name: 'abc'}) 以上是常规的通过路由的页面跳转方法. 我们现在的需求是另外开启一个新页面来显示跳转到的页面,原本的窗口保持页面不变. const { href } = this.$router.resolve({ name: 'abc' }) window.

  • vue路由跳转router-link清除历史记录的三种方式(总结)

    目录 路由跳转router-link清除历史记录 官方文档提供了如下三种方式 vue跳转后不记录历史记录 路由跳转router-link清除历史记录 1.在vue项目中说起路由跳转,我们最先想到的就是router-link标签以及this.$router.push函数. router-link和this.\$router.push的实现原理是一样的,在点击router-link时,内部调用的就是this.$router.push. 2.this.\$router.push这个方法会向 histo

  • Vue路由跳转方式区别汇总(push,replace,go)

    目录 声明式导航router-link 1. 不带参数 2.带参数 编程式导航 1.this.$router.push 2.this.$router.replace 3.this.$router.go(n) 总结区别: 在浏览器中,点击链接实现导航的方式,叫做声明式导航.例如:普通网页中点击 a标签链接.vue项目中点击router-link标签链接都属于声明式导航.在浏览器中,调用API方法实现导航的方式,叫做编程式导航.例如:普通网页中调用location.href跳转到新页面的方式,属于编

  • vue路由跳转后刷新指定页面的方法

    做项目遇到一个坑:A页面带参跳转到B页面,第二次跳转时的参数与第一次时的参数不同,但是后台查询时还是使用的第一次的参数.需要手动刷新之后,才会使用第二次参数. 鉴于时间原因直接使用刷新页面监听路由的方法.在准备跳转的A页面添加路由跳转监听事件,达到每次A页面跳转B页面时,B页面都会再次重新加载页面. 添加完成后,A页面跳转B页面,B页面成功刷新.正当我高兴的以为又解决了一个bug时,突然发现我从A页面跳转到C页面时,C页面竟然也在发生页面刷新现象.当时着实是将小主吓了一大跳.要知道正是因为要填写

  • vue路由跳转时判断用户是否登录功能的实现

    通过判断该用户是否登录过,如果没有登录则跳转到login登录路由,如果登录则正常跳转. 一丶首先在用户登录前后分别给出一个状态来标识此用户是否登录(建议用vuex): 简单用vuex表示一下,不会可以自己去官网多看看: import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex); var state = { isLogin:0, //初始时候给一个 isLogin=0 表示用户未登录 }; const mutations = { cha

  • vue路由跳转传参数的方法

    vue中路由跳转传参数有多种,自己常用的是下面的几种 通过router-link进行跳转 通过编程导航进行路由跳转 1. router-link <router-link :to="{ path: 'yourPath', params: { name: 'name', dataObj: data }, query: { name: 'name', dataObj: data } }"> </router-link> 1. path -> 是要跳转的路由路径

  • 详解vue 路由跳转四种方式 (带参数)

    1.  router-link 1. 不带参数 <router-link :to="{name:'home'}"> <router-link :to="{path:'/home'}"> //name,path都行, 建议用name // 注意:router-link中链接如果是'/'开始就是从根路由开始,如果开始不带'/',则从当前路由开始. 2.带参数 <router-link :to="{name:'home', para

  • vue路由跳转传递参数的方式总结

    日常业务中,路由跳转的同时传递参数是比较常见的,传参的方式有三种: 1)通过动态路由方式 //路由配置文件中 配置动态路由 { path: '/detail/:id', name: 'Detail', component: Detail } //跳转时页面 var id = 1; this.$router.push('/detail/' + id) //跳转后页面获取参数 this.$route.params.id 2)通过query属性传值 //路由配置文件中 { path: '/detail

随机推荐