Tan*_*ong 64 javascript vue.js vue-router
我有一个摘要页面和一个详细信息子页面.所有路线都使用vue-router
(v 0.7.x)使用程序化导航实现,如下所示:
this.$router.go({ path: "/link/to/page" })
Run Code Online (Sandbox Code Playgroud)
但是,当我从摘要页面路由到子页面时,我需要在新选项卡中打开子页面,就像添加_target="blank"
到<a>
标签一样.
有没有办法做到这一点?
小智 94
我认为你可以这样做:
let routeData = this.$router.resolve({name: 'routeName', query: {data: "someData"}});
window.open(routeData.href, '_blank');
Run Code Online (Sandbox Code Playgroud)
它对我有用.谢谢.
And*_*Mao 82
现在似乎可以在较新版本(Vue Router 3.0.1)中使用:
<router-link :to="{ name: 'fooRoute'}" target="_blank">
Link Text
</router-link>
Run Code Online (Sandbox Code Playgroud)
如果您定义路线,就像问题中提到的那样(路径:'/ 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
}
]
})
Run Code Online (Sandbox Code Playgroud)
您可以在摘要页面中解析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>
Run Code Online (Sandbox Code Playgroud)
当然,如果您为路由指定了名称,则可以按名称解析URL:
routes: [
{
path: '/link/to/page',
component: MyComponent,
name: 'subPage'
}
]
...
let route = this.$router.resolve({name: 'subPage'});
Run Code Online (Sandbox Code Playgroud)
参考文献:
小智 7
只需在您的路由文件中编写此代码:
{
name: 'Google',
path: '/google',
beforeEnter() {
window.open("http://www.google.com",
'_blank');
}
}
Run Code Online (Sandbox Code Playgroud)
这对我有用-
let routeData = this.$router.resolve(
{
path: '/resources/c-m-communities',
query: {'dataParameter': 'parameterValue'}
});
window.open(routeData.href, '_blank');
Run Code Online (Sandbox Code Playgroud)
我修改了@Rafael_Andrs_Cspedes_Basterio 答案
如果你喜欢上相对路径只关心:/dashboard
,/about
等等,见其他的答案。
如果你想打开一个绝对路径,比如:https://www.google.com
到一个新选项卡,你必须知道 Vue Router 并不打算处理这些。
然而,他们似乎认为这是一个功能要求。#1280。但在他们这样做之前,
这里有一个小技巧,你可以用 vue-router 处理外部链接。
router.js
)并添加以下代码:/* 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()
}
Run Code Online (Sandbox Code Playgroud)
现在,每当我们处理绝对 URL 时,我们就有了一个解决方案。例如打开谷歌到一个新标签
this.$router.absUrl('https://www.google.com)
Run Code Online (Sandbox Code Playgroud)
请记住,每当我们打开另一个页面到新选项卡时,我们都必须使用noopener noreferrer
.
小智 5
我认为最好的方法是简单地使用:
window.open("yourURL", '_blank');
Run Code Online (Sandbox Code Playgroud)
* 飞走了 *
项目中的某个位置,通常是main.js或router.js
import Router from 'vue-router'
Router.prototype.open = function (routeObject) {
const {href} = this.resolve(routeObject)
window.open(href, '_blank')
}
Run Code Online (Sandbox Code Playgroud)
在您的组件中:
<div @click="$router.open({name: 'User', params: {ID: 123}})">Open in new tab</div>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
57970 次 |
最近记录: |