概要ページと詳細サブページがあります。すべてのルートは、次のようなプログラムによるナビゲーションを使用して、vue-router
(v 0.7.x)で実装されます。
this.$router.go({ path: "/link/to/page" })
ただし、概要ページからサブページにルーティングするときは、_target="blank"
タグに<a>
を追加するのと同じように、新しいタブでサブページを開く必要があります。
これを行う方法はありますか?
次のようなことができると思います。
let routeData = this.$router.resolve({name: 'routeName', query: {data: "someData"}});
window.open(routeData.href, '_blank');
それは私のために働いた。ありがとう。
これは、新しいバージョン(Vue Router 3.0.1)で可能になったようです:
<router-link :to="{ name: 'fooRoute'}" target="_blank">
Link Text
</router-link>
不思議に思う人は答えはノーです。 githubの関連する issue を参照してください。
Q:vue-routerは新しいタブでリンクをプログラム的に開くことができます
A:いいえ。通常のリンクを使用します。
質問で尋ねられたようなルートを定義する場合(パス: '/ 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
}
]
})
概要ページでURLを解決し、次のようにサブページを開くことができます。
<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>
もちろん、ルートに名前を付けた場合、URLを名前で解決できます。
routes: [
{
path: '/link/to/page',
component: MyComponent,
name: 'subPage'
}
]
...
let route = this.$router.resolve({name: 'subPage'});
参照:
プロジェクトのどこか、通常はmain.jsまたはrouter.js
import Router from 'vue-router'
Router.prototype.open = function (routeObject) {
const {href} = this.resolve(routeObject)
window.open(href, '_blank')
}
コンポーネントで:
<div @click="$router.open({name: 'User', params: {ID: 123}})">Open in new tab</div>
私は最善の方法は単に使用することだと思います:
window.open("yourURL", '_blank');
????* 飛び去ります *
ルーティングファイルに次のコードを記述するだけです。
{
name: 'Google',
path: '/google',
beforeEnter() {
window.open("http://www.google.com",
'_blank');
}
}