Tengo una página de resumen y una subpágina de detalles. Todas las rutas se implementan con vue-router
(v 0.7.x) usando navegación programática como esta:
this.$router.go({ path: "/link/to/page" })
Sin embargo, cuando me dirijo desde la página de resumen a la subpágina, necesito abrir la subpágina en una nueva pestaña tal como lo haría al agregar _target="blank"
una <a>
etiqueta.
¿Hay alguna forma de hacer esto?
javascript
vue.js
vue-router
Tang Jiong
fuente
fuente
Respuestas:
Creo que puedes hacer algo como esto:
let routeData = this.$router.resolve({name: 'routeName', query: {data: "someData"}}); window.open(routeData.href, '_blank');
funcionó para mí. Gracias.
fuente
Parece que esto ahora es posible en versiones más recientes (Vue Router 3.0.1):
<router-link :to="{ name: 'fooRoute'}" target="_blank"> Link Text </router-link>
fuente
this.$router.push()
.Para aquellos que se preguntan, la respuesta es no. Consulte el problema relacionado en github.
fuente
target="_blank"
a una<router-link>
etiqueta en v3 stackoverflow.com/a/49654382/2678454En caso de que defina su ruta como la que se hizo en la pregunta (ruta: '/ enlace / a / página'):
import Vue from 'vue' import Router from 'vue-router' import MyComponent from '@/components/MyComponent.vue'; Vue.use(Router) export default new Router({ routes: [ { path: '/link/to/page', component: MyComponent } ] })
Puede resolver la URL en su página de resumen y abrir su subpágina de la siguiente manera:
<script> export default { methods: { popup() { let route = this.$router.resolve({path: '/link/to/page'}); // let route = this.$router.resolve('/link/to/page'); // This also works. window.open(route.href, '_blank'); } } }; </script>
Por supuesto, si le ha dado un nombre a su ruta, puede resolver la URL por nombre:
routes: [ { path: '/link/to/page', component: MyComponent, name: 'subPage' } ] ... let route = this.$router.resolve({name: 'subPage'});
Referencias:
fuente
En algún lugar de su proyecto, normalmente main.js o router.js
import Router from 'vue-router' Router.prototype.open = function (routeObject) { const {href} = this.resolve(routeObject) window.open(href, '_blank') }
En su componente:
<div @click="$router.open({name: 'User', params: {ID: 123}})">Open in new tab</div>
fuente
Creo que la mejor manera es simplemente usar:
window.open("yourURL", '_blank');
🚀 * se va volando *
fuente
Simplemente escriba este código en su archivo de enrutamiento:
{ name: 'Google', path: '/google', beforeEnter() { window.open("http://www.google.com", '_blank'); } }
fuente
Esto funcionó para mí
let routeData = this.$router.resolve( { path: '/resources/c-m-communities', query: {'dataParameter': 'parameterValue'} }); window.open(routeData.href, '_blank');
Modifiqué la respuesta de @Rafael_Andrs_Cspedes_Basterio
fuente
Si usted está interesado sólo en las trayectorias relativas como:
/dashboard
,/about
etc, Ver otras respuestas.Si desea abrir una ruta absoluta como:
https://www.google.com
a una nueva pestaña, debe saber que Vue Router NO está destinado a manejarlos.Sin embargo, parecen considerar eso como una solicitud de función. # 1280 . Pero hasta que hagan eso,
router.js
) y agregue este código:/* Vue Router is not meant to handle absolute urls. */ /* So whenever we want to deal with those, we can use this.$router.absUrl(url) */ Router.prototype.absUrl = function(url, newTab = true) { const link = document.createElement('a') link.href = url link.target = newTab ? '_blank' : '' if (newTab) link.rel = 'noopener noreferrer' // IMPORTANT to add this link.click() }
this.$router.absUrl('https://www.google.com)
Recuerde que cada vez que abrimos otra página a una nueva pestaña DEBEMOS usar
noopener noreferrer
.Leer más aquí
o aquí
fuente
Esto funciona para mi:
En plantilla HTML:
<a target="_blank" :href="url" @click.stop>your_name</a>
En montado ():
this.url = `${window.location.origin}/your_page_name`;
fuente
La forma más sencilla de hacer esto usando una etiqueta de anclaje sería la siguiente:
<a :href="$router.resolve({name: 'posts.show', params: {post: post.id}}).href" target="_blank"> Open Post in new tab </a>
fuente