경로
를 관리하는 기술만약 routing이 없다면
Vue 공식 라우터 (The official Router for Vue.js)
공식 라우터
-> Home, About 링크에 따라 변경되는 URL과 새로 렌더링 되는 화면
페이지를 다시 로드하지 않고 RUL을 변경하고 URL 생성 및 관련 로직을 처리
HTML의 a태그를 렌더링
<RouterView />
)URL(라우트)과 컴포넌트
를 매핑(연결)RouterView 위치에 렌더링 할 컴포넌트를 배치
기존 components 폴더와 기능적으로 다른 것은 없으며 단순 분류의 의미로 구성됨
-> 일반 컴포넌트와 구분하기 위해 컴포넌트 이름을 View로 끝나도록 작성하는 것을 권장
//index.js
const router = createRouter({
routes: [
{
path: '/',
name: 'home',
component: HomeView
},
...
]
})
to
속성으로 index.js에서 정의한 주소 속성 값(path)을 사용경로에 이름을 지정하는 라우팅
name 속성 값에 경로에 대한 이름을 지정
경로에 연결하려면 RouterLink에 v-bind를 사용해 'to' prop 객체로 전달
Named Routes 장점
- 하드코딩 된 URL을 사용하지 않아도 됨
- URL 입력 시 오타 방지
매개 변수를 사용한 동적 경로 매칭
UserView 컴포넌트 작성
UserVies 컴포넌트 라우트 등록
{
path: '/user/:id',
name: 'user',
component: UserView
}
$route.params
로 참조 가능프로그래밍 방식 네비게이션
- router의 인스턴스 메서드를 사용해 RouterLink로 a태그를 만드는 것처럼 프로그래밍으로 네비게이션 관련 작업을 수행할 수 있음
- 다른 위치로 이동하기 => router.push()
- 현재 위치 바꾸기 => router.replace()
import { userRoute, useRouter } from 'vue-router'
const router = useRouter()
const goHome = function() {
router.push({ name: 'home' })
}
참고 : https://router.vuejs.org/guide/essentials/navigation.html
// literal string path
router.push('/users/alice')
//object with path
router.push({ path: '/users/alice' })
//named route with params to let the router build the url
router.push({ name: 'user', params: { username: 'alice' } })
//with query, resulting in /register?plan=private
router.push({ path: '/register', query: {plan: 'private' } })
Vue router를 통해 특정 URL에 접근할 때 다른 URL로 redirect를 하거나 취소하여 네비게이션을 보호
ex) 인증 정보가 없으면 특정 페이지에 접근하지 못하게 함
1. Globally (전역 가드)
- 애플리케이션 전역에서 동작
- index.js에서 정의
이동하기 직전
에 실행되는 함수
- to : 이동할 URL 정보가 담긴 Route 객체
- from : 현재 RUL 정보가 담긴 Route 객체
- 선택적 반환(return) 값
1. false
- Route Locaion
false
- 현재 내비게이션을 취소
- 브라우저 URL이 변경된 경우(사용자가 수동으로 또는 뒤로 버튼을 통해) from 경로의 URL로 재설정
Route Lacation
2. Per-route (라우터 가드)
- 특정 route 에서만 동작
- index.js의 각 routes에 정의
진입했을 때만
실행되는 함수"이미 로그인 한 상태라면 LoginView 진입을 막고 HomeView로 이동 시키기" (전역 가드 활용 코드는 주석 처리 후 진행)
3. In-component (컴포넌트 가드)
- 특정 컴포넌트 내에서만 동작
- 컴포넌트 Script에 정의
현재 페이지
를 떠나는
동작에 대한 로직을 처리사용자가 UserView를 떠날 시 팝업 창 출력하기
// UserView.vue
import {onBeforeRouteLeave} from 'vue-router'
onBeforeRouteLeave((to, from) => {
const answer = window.confirm('정말 떠나실 건가요?')
if (answer === false) {
return false
}
})
같은 라우트
내에서 업데이트 되기 전에 실행import { onBeforeRouteUpdate } from 'vue-router'
<button @click="routeUpdate">100번 유저 페이지</button>
const routeUpdate = function() {
router.push({name:'user', params: {id: 100} })
}
onBeforeRouteUpdate((to, from) => {
userId.value = to.params.id
})
만약 onBeforeRouteUpdate 를 사용하지 않았다면
- onBeforeRouteUpdate에서 userId를 변경하지 않으면 userId는 갱신되지 않음
- 컴포넌트가 재사용되었기 때문
해당 경로를 처음으로 방문할 때만 컴포넌트를 로드
하는 것