navigateTo
navigateTo 是一个帮助函数,用于以编程方式导航用户。
用法
navigateTo
可在服务器端和客户端使用。它可以在 Nuxt 上下文中使用,也可以直接用于页面导航。
调用 navigateTo
时,请确保始终在其结果上使用 await
或 return
。
navigateTo
不能在 Nitro 路由中使用。要在 Nitro 路由中执行服务器端重定向,请使用 sendRedirect
。
在 Vue 组件中
// 将 'to' 作为字符串传递
await navigateTo('/search')
// ... 或作为路由对象
await navigateTo({ path: '/search' })
// ... 或作为带查询参数的路由对象
await navigateTo({
path: '/search',
query: {
page: 1,
sort: 'asc'
}
})
在路由中间件中
export default defineNuxtRouteMiddleware((to, from) => {
if (to.path !== '/search') {
// 将重定向代码设置为 '301 Moved Permanently'
return navigateTo('/search', { redirectCode: 301 })
}
})
在路由中间件中使用 navigateTo
时,必须返回其结果以确保中间件执行流程正常工作。
例如,以下实现将无法按预期工作:
export default defineNuxtRouteMiddleware((to, from) => {
if (to.path !== '/search') {
// ❌ 这将无法按预期工作
navigateTo('/search', { redirectCode: 301 })
return
}
})
在这种情况下,navigateTo
将被执行但不会返回,这可能导致意外行为。
导航到外部 URL
navigateTo
中的 external
参数影响 URL 的导航方式:
-
没有
external: true
:- 内部 URL 按预期导航。
- 外部 URL 抛出错误。
-
有
external: true
:- 内部 URL 以全页面重新加载方式导航。
- 外部 URL 按预期导航。
示例
// 将抛出错误;
// 默认情况下不允许导航到外部 URL
await navigateTo('https://nuxt.com')
// 将成功重定向,'external' 参数设置为 'true'
await navigateTo('https://nuxt.com', {
external: true
})
在新标签页中打开页面
// 将在新标签页中打开 'https://nuxt.com'
await navigateTo('https://nuxt.com', {
open: {
target: '_blank',
windowFeatures: {
width: 500,
height: 500
}
}
})
类型
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 }>
参数
to
类型: RouteLocationRaw
| undefined
| null
默认值: '/'
to
可以是要重定向到的普通字符串或路由对象。当传递为 undefined
或 null
时,将默认为 '/'
。
示例
// 直接传递 URL 将重定向到 '/blog' 页面
await navigateTo('/blog')
// 使用路由对象,将重定向到名称为 'blog' 的路由
await navigateTo({ name: 'blog' })
// 使用路由对象传递参数(id = 1)重定向到 'product' 路由。
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
-
允许使用窗口的 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 属性的详细信息,请参阅 文档。
-
-