Ответ 1
Я думаю, что вы можете сделать что-то вроде этого:
let routeData = this.$router.resolve({name: 'routeName', query: {data: "someData"}});
window.open(routeData.href, '_blank');
это сработало для меня. спасибо.
У меня есть сводная страница и подробная страница. Все маршруты реализованы с помощью 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>
Для тех, кто интересуется ответом, нет. См. Соответствующий issue в github.
В: Можно ли открывать ссылку vue-router в новой вкладке progammaticaly
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');
}
}