Mam stronę podsumowującą i szczegółową. Wszystkie trasy są zaimplementowane w vue-router
(v 0.7.x) przy użyciu nawigacji programowej w następujący sposób:
this.$router.go({ path: "/link/to/page" })
Jednak gdy przechodzę ze strony podsumowania do podstrony, muszę otworzyć podstronę w nowej zakładce, tak jak dodając _target="blank"
do <a>
tagu.
Czy jest na to sposób?
javascript
vue.js
vue-router
Tang Jiong
źródło
źródło
Odpowiedzi:
Myślę, że możesz zrobić coś takiego:
let routeData = this.$router.resolve({name: 'routeName', query: {data: "someData"}}); window.open(routeData.href, '_blank');
U mnie to zadziałało.
źródło
Wygląda na to, że jest to teraz możliwe w nowszych wersjach (Vue Router 3.0.1):
<router-link :to="{ name: 'fooRoute'}" target="_blank"> Link Text </router-link>
źródło
this.$router.push()
.Dla tych, którzy się zastanawiają, odpowiedź brzmi: nie. Zobacz powiązany problem na github.
źródło
target="_blank"
do<router-link>
tagu w wersji v3 stackoverflow.com/a/49654382/2678454W przypadku, gdy określisz swoją trasę, taką jak ta zadana w pytaniu (ścieżka: '/ link / to / page'):
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 } ] })
Możesz rozwiązać adres URL na swojej stronie podsumowania i otworzyć podstronę, jak poniżej:
<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>
Oczywiście, jeśli nadałeś swojej trasie nazwę, możesz rozwiązać adres URL według nazwy:
routes: [ { path: '/link/to/page', component: MyComponent, name: 'subPage' } ] ... let route = this.$router.resolve({name: 'subPage'});
Bibliografia:
źródło
Gdzieś w projekcie, zazwyczaj main.js lub router.js
import Router from 'vue-router' Router.prototype.open = function (routeObject) { const {href} = this.resolve(routeObject) window.open(href, '_blank') }
W twoim komponencie:
<div @click="$router.open({name: 'User', params: {ID: 123}})">Open in new tab</div>
źródło
To zadziałało dla mnie
let routeData = this.$router.resolve( { path: '/resources/c-m-communities', query: {'dataParameter': 'parameterValue'} }); window.open(routeData.href, '_blank');
Zmodyfikowałem odpowiedź @Rafael_Andrs_Cspedes_Basterio
źródło
Po prostu zapisz ten kod w swoim pliku routingu:
{ name: 'Google', path: '/google', beforeEnter() { window.open("http://www.google.com", '_blank'); } }
źródło
Myślę, że najlepszym sposobem jest po prostu użycie:
window.open("yourURL", '_blank');
🚀 * odlatuje *
źródło
Jeśli jesteś zainteresowany tylko na względnych ścieżek takich jak:
/dashboard
,/about
etc, zobacz inne odpowiedzi.Jeśli chcesz otworzyć absolutną ścieżkę, taką jak:
https://www.google.com
do nowej karty, musisz wiedzieć, że Vue Router NIE jest przeznaczony do ich obsługi.Wydaje się jednak, że uważają to za prośbę o dodanie funkcji. # 1280 . Ale dopóki tego nie zrobią,
router.js
) i dodaj ten kod:/* 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)
Pamiętaj, że ilekroć otwieramy kolejną stronę w nowej karcie, MUSIMY z niej skorzystać
noopener noreferrer
.Przeczytaj więcej tutaj
lub tu
źródło
To działa dla mnie:
W szablonie HTML:
<a target="_blank" :href="url" @click.stop>your_name</a>
W zamontowanym ():
this.url = `${window.location.origin}/your_page_name`;
źródło
Najprostszym sposobem na zrobienie tego za pomocą tagu kotwicy jest:
<a :href="$router.resolve({name: 'posts.show', params: {post: post.id}}).href" target="_blank"> Open Post in new tab </a>
źródło