navigateTo 在服务器端和客户端都可用。它可以在 Nuxt 上下文中使用,也可以直接用于执行页面导航。
navigateTo 时,请务必始终对其结果使用 await 或 return。navigateTo 不能在 Nitro 路由中使用。要在 Nitro 路由中执行服务器端重定向,请使用sendRedirect代替。<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 将被执行但不会返回,这可能导致意外行为。
navigateTo 中的 external 参数会影响 URL 导航的处理方式
external: true:external: true:<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
一个接受以下属性的对象
replacebooleanfalsenavigateTo 会在客户端将给定路由推入 Vue Router 实例。replace 设置为 true 来改变此行为,以指示应替换给定路由。redirectCodenumber302navigateTo 重定向到给定路径,并在服务器端发生重定向时将重定向代码设置为302 Found默认情况下。redirectCode 来修改此默认行为。通常,301 Moved Permanently可用于永久重定向。externalbooleanfalsetrue 时,允许导航到外部 URL。否则,navigateTo 将抛出错误,因为默认情况下不允许外部导航。openOpenOptionstargetstring'_blank'windowFeaturesOpenWindowFeatures| 属性 | 类型 | 描述 |
|---|---|---|
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。 |