사용법
navigateTo는 서버 사이드와 클라이언트 사이드 모두에서 사용할 수 있습니다. Nuxt 컨텍스트 내에서 또는 직접 페이지 이동을 수행하는 데 사용할 수 있습니다.
navigateTo를 호출할 때 항상 그 결과에 await 또는 return을 사용해야 합니다.navigateTo는 Nitro 라우트 내에서 사용할 수 없습니다. Nitro 라우트에서 서버 사이드 리디렉션을 수행하려면 sendRedirect를 대신 사용하세요.Vue 컴포넌트 내에서
<script setup lang="ts">
// 'to'를 문자열로 전달
await navigateTo('/search')
// ... 또는 라우트 객체로 전달
await navigateTo({ path: '/search' })
// ... 또는 쿼리 파라미터가 포함된 라우트 객체로 전달
await navigateTo({
path: '/search',
query: {
page: 1,
sort: 'asc'
}
})
</script>
라우트 미들웨어 내에서
export default defineNuxtRouteMiddleware((to, from) => {
if (to.path !== '/search') {
// 리디렉션 코드를 '301 Moved Permanently'로 설정
return navigateTo('/search', { redirectCode: 301 })
}
})
라우트 미들웨어 내에서 navigateTo를 사용할 때는 그 결과를 반드시 반환(return)해야 미들웨어 실행 흐름이 올바르게 동작합니다.
예를 들어, 다음 구현은 예상대로 동작하지 않습니다:
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은 정상적으로 이동합니다.
예시
<script setup lang="ts">
// 에러가 발생합니다;
// 기본적으로 외부 URL로 이동하는 것은 허용되지 않습니다
await navigateTo('https://nuxt.com')
// 'external' 파라미터를 'true'로 설정하면 정상적으로 리디렉션됩니다
await navigateTo('https://nuxt.com', {
external: true
})
</script>
새 탭에서 페이지 열기
<script setup lang="ts">
// 'https://nuxt.com'을 새 탭에서 엽니다
await navigateTo('https://nuxt.com', {
open: {
target: '_blank',
windowFeatures: {
width: 500,
height: 500
}
}
})
</script>
타입
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 인스턴스에 push합니다.
이 동작은replace를true로 설정하여 주어진 라우트가 대체(replace)되도록 변경할 수 있습니다.
- 타입:
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 - 다음 속성을 받을 수 있는 객체입니다:
속성 타입 설명 popupboolean브라우저가 UI 기능을 결정하는 최소한의 팝업 창을 요청합니다. width또는innerWidthnumber스크롤바를 포함한 콘텐츠 영역의 너비(최소 100픽셀)를 지정합니다. height또는innerHeightnumber스크롤바를 포함한 콘텐츠 영역의 높이(최소 100픽셀)를 지정합니다. left또는screenXnumber새 창의 수평 위치를 화면의 왼쪽 가장자리 기준으로 설정합니다. top또는screenYnumber새 창의 수직 위치를 화면의 위쪽 가장자리 기준으로 설정합니다. noopenerboolean새 창이 window.opener를 통해 원본 창에 접근하지 못하도록 방지합니다.noreferrerbooleanReferer 헤더 전송을 방지하고, 암묵적으로 noopener를 활성화합니다.
windowFeatures 속성에 대한 자세한 정보는 문서를 참고하세요.
- 타입:
- 타입: