使用
navigateTo
在服务器端和客户端都可用。它可以在 Nuxt 上下文中使用,也可以直接用于执行页面导航。
在调用
navigateTo
时,请务必始终使用 await
或 return
处理其结果。navigateTo
不能在 Nitro 路由中使用。要在 Nitro 路由中执行服务器端重定向,请使用sendRedirect
代替。在 Vue 组件中
<script setup lang="ts">
// passing 'to' as a string
await navigateTo('/search')
// ... or as a route object
await navigateTo({ path: '/search' })
// ... or as a route object with query parameters
await navigateTo({
path: '/search',
query: {
page: 1,
sort: 'asc',
},
})
</script>
在路由中间件中
export default defineNuxtRouteMiddleware((to, from) => {
if (to.path !== '/search') {
// setting the redirect code to '301 Moved Permanently'
return navigateTo('/search', { redirectCode: 301 })
}
})
在路由中间件中使用 navigateTo
时,你必须返回其结果,以确保中间件执行流程正常工作。
例如,以下实现将无法按预期工作
export default defineNuxtRouteMiddleware((to, from) => {
if (to.path !== '/search') {
// ❌ This will not work as expected
navigateTo('/search', { redirectCode: 301 })
return
}
})
在这种情况下,navigateTo
将被执行但不会返回,这可能导致意外行为。
导航到外部 URL
navigateTo
中的 external
参数会影响如何处理导航到 URL
- 不带
external: true
:- 内部 URL 按预期导航。
- 外部 URL 会抛出错误。
- 带
external: true
:- 内部 URL 会进行全页面重新加载。
- 外部 URL 按预期导航。
示例
<script setup lang="ts">
// will throw an error;
// navigating to an external URL is not allowed by default
await navigateTo('https://nuxtjs.org.cn')
// will redirect successfully with the 'external' parameter set to 'true'
await navigateTo('https://nuxtjs.org.cn', {
external: true,
})
</script>
在新标签页中打开页面
<script setup lang="ts">
// will open 'https://nuxtjs.org.cn' in a new tab
await navigateTo('https://nuxtjs.org.cn', {
open: {
target: '_blank',
windowFeatures: {
width: 500,
height: 500,
},
},
})
</script>
类型
签名
export function navigateTo (
to: RouteLocationRaw | undefined | null,
options?: NavigateToOptions
): Promise<void | NavigationFailure | false> | false | void | RouteLocationRaw
interface NavigateToOptions {
replace?: boolean
redirectCode?: number
external?: boolean
open?: OpenOptions
}
type OpenOptions = {
target: string
windowFeatures?: OpenWindowFeatures
}
type OpenWindowFeatures = {
popup?: boolean
noopener?: boolean
noreferrer?: boolean
} & XOR<{ width?: number }, { innerWidth?: number }>
& XOR<{ height?: number }, { innerHeight?: number }>
& XOR<{ left?: number }, { screenX?: number }>
& XOR<{ top?: number }, { screenY?: number }>
参数
@BobbieGoede
类型: RouteLocationRaw
| undefined
| null
默认: '/'
to
可以是一个纯字符串或一个路由对象,用于重定向。当传入 undefined
或 null
时,它将默认为 '/'
。
示例
// Passing the URL directly will redirect to the '/blog' page
await navigateTo('/blog')
// Using the route object, will redirect to the route with the name 'blog'
await navigateTo({ name: 'blog' })
// Redirects to the 'product' route while passing a parameter (id = 1) using the route object.
await navigateTo({ name: 'product', params: { id: 1 } })
options
(可选)
类型: NavigateToOptions
一个接受以下属性的对象
replace
- 类型:
boolean
- 默认:
false
- 默认情况下,
navigateTo
在客户端将给定路由推送到 Vue Router 实例中。
可以通过将replace
设置为true
来更改此行为,以指示应替换给定路由。
- 类型:
redirectCode
- 类型:
number
- 默认:
302
navigateTo
重定向到给定路径并将重定向代码设置为302 Found
当重定向在服务器端发生时,默认情况下。
可以通过提供不同的redirectCode
来修改此默认行为。通常,301 Moved Permanently
可用于永久重定向。
- 类型:
external
- 类型:
boolean
- 默认:
false
- 设置为
true
时允许导航到外部 URL。否则,navigateTo
将抛出错误,因为默认情况下不允许外部导航。
- 类型:
open
- 类型:
OpenOptions
- 允许使用 window 的open()方法导航到 URL。此选项仅适用于客户端,在服务器端将被忽略。
一个接受以下属性的对象 target
- 类型:
string
- 默认:
'_blank'
- 一个不带空格的字符串,指定资源加载到的浏览上下文的名称。
- 类型:
windowFeatures
- 类型:
OpenWindowFeatures
- 一个接受以下属性的对象
属性 类型 描述 popup
boolean
请求一个最小的弹出窗口而不是新标签页,UI 功能由浏览器决定。 width
或innerWidth
number
指定内容区域的宽度(最小 100 像素),包括滚动条。 height
或innerHeight
number
指定内容区域的高度(最小 100 像素),包括滚动条。 left
或screenX
number
设置新窗口相对于屏幕左边缘的水平位置。 top
或screenY
number
设置新窗口相对于屏幕上边缘的垂直位置。 noopener
boolean
阻止新窗口通过 window.opener
访问源窗口。noreferrer
boolean
阻止发送 Referer 头部并隐式启用 noopener
。
请参考文档获取有关 windowFeatures 属性的更详细信息。
- 类型:
- 类型: