페이지를 구성하다 보면 상위 요소가 선택되어야 의미가 있는 하위 요소들이 있다. 예를 들어 특정 사용자의 프로필을 본다든가, 그 사람이 작성한 글을 보는 상황을 생각해 보자. 이 페이지들은 [사용자 선택]이 없다면 아무 의미가 없는 행동들이다. 이런 경우 상위 컴포넌트에 하위 컴포넌트를 포함시키는 중첩 경로 즉 nested route를 구성할 수 있다.
Router 작성
중첩 경로를 작성하기 위해서는상위 경로에children이라는속성을 이용해서중첩 경로 정보를 작성해주면 된다.children은 []로 여러 개의 중첩 컴포넌트에 대한 route를 작성할 수 있다. 이때중첩 컴포넌트의 path는[상위 path] + '/' + [중첩 path]로구성되기 때문에중첩 컴포넌트의 path를 구성할 때 '/'를 삽입하지 않는다.
{
// 상위 컴포넌트에 대한 route 정보
path: '/user/:id',
name: 'user',
component: UserView,
// 중첩 컴포넌트에 대한 route 정보
children: [
{
path: 'profile', // /user/:id/profile에 매핑, /로 시작 하지 않음
component: ProfileView,
name: 'user_profile'
},
{
path: 'post',
component: PostView,
name: 'user_post'
}
]
}
<template>영역
언제나처럼 Root 컴포넌트(App)는 상위 컴포넌트(UserComp)를 위한 RouterView를 갖는다. 이 Root 컴포넌트의 RouterView에는 중첩 컴포넌트는 표시되지 않는다.
두 번째 RouterLink는 path 기반으로 /user/[id]/profile 경로에 매핑된 component를 호출한다. 하지만 이렇게 경로를 만들다 보면 경로가 쉽게 파악하기 어려울 수 있다. 이럴 때세 번째 RouterLink처럼객체를 이용해서 name 기반의 호출을 이용하면 간단히 처리할 수 있다.
다음은 중첩 컴포넌트(UserProfile, UserPost)를 포함하는 상위 컴포넌트(UserComp)이다. 상위 컴포넌트는중첩 컴포넌트를 표시할 RouterView를 갖는다.
지금까지의 router는 하나의 RouterView에 하나의 component들을 교체하는 방식으로 구성되었다.
만약 특정 링크로 이동 시 표현되어야 할 컴포넌트가여러 개면어떨까? 예를 들어 어떤 쇼핑몰에 갔더니 상품소개 컴포넌트와 함께 상품 후기, 상품 주문 등이 한꺼번에 있는 경우도 자주 보게 된다. 또한 대부분의 페이지는 header, content, footer로 구분된다.
이처럼레이아웃을 구성해야 하는 경우RouterView에 이름을 부여하고특정 이름의 RouterView에 특정 컴포넌트를 배치할 수 있는데 이것이named view이다. 이때 이름을 지정하지 않은 RouterView는 기본 값으로default라는이름을 갖는다.
named view의 목적은 "한 화면에 여러 개의 컴포넌트를 보이겠다"는 것이다. 따라서 기존에 route 정보를 구성할 때 속성이 path와component였다면named view가 사용되는 경우는 path 하나에 여러 개의 component 즉 components를 사용한다.