티스토리 뷰

Vue.JS

[vue-router] 중첩된 라우트

버미노트 2019. 6. 9. 23:17

실제 앱 UI는 일반적으로 여러 단계의 중첩 된 컴포넌트로 이루어져 있습니다. URL의 세그먼트(/로 구분 되는 각각의 문자열)는 중첩된 컴포넌트의 특정 구조와 일치하는 경우가 매우 많습니다. 예를 들면,

/user/foo/profile                     /user/foo/posts
+------------------+                  +-----------------+
| User             |                  | User            |
| +--------------+ |                  | +-------------+ |
| | Profile      | |  +------------>  | | Posts       | |
| |              | |                  | |             | |
| +--------------+ |                  | +-------------+ |
+------------------+                  +-----------------+

vue-router의 중첩된 라우트를 사용하면 위의 관계를 표현하는 것이 간단해 집니다. 위의 구조(중첩 라우트)대로 vue-router를 사용하여 컴포넌트를 만든다면,

const User = {
  template: `
    <div class="user">
      <h2>User {{ $route.params.id }}</h2>
      <router-view></router-view>
    </div>
  `
}

위의 코드와 같이 컴포넌트를 만들 수 있습니다. 그 후 vue-router의 VueRouter 생성자 옵션은,

const router = new VueRouter({
  routes: [
    { path: '/user/:id', component: User,
      children: [
        {
          // /user/:id/profile 과 일치 할 때
          // UserProfile은 User의 <router-view> 내에 렌더링 됩니다.
          path: 'profile',
          component: UserProfile
        },
        {
          // /user/:id/posts 과 일치 할 때
          // UserPosts가 User의 <router-view> 내에 렌더링 됩니다.
          path: 'posts',
          component: UserPosts
        }
      ]
    }
  ]
})

위의 코드와 같이 설정해야 합니다. children 옵션은 routes와 같은 라우트 설정 객체의 또 다른 배열 입니다. 필요한 만큰 중첩된 뷰를 사용할 수 있습니다.

참고

'Vue.JS' 카테고리의 다른 글

[vue-router] Named Routes & Views  (0) 2019.06.10
[vue-router] 프로그래밍 방식 네비게이션  (0) 2019.06.09
[vue-router] 동적 라우트 매칭  (0) 2019.06.09
[vue-router] 시작하기  (0) 2019.06.06
[Vue.JS] 반응형 시스템  (2) 2019.02.20
댓글
공지사항
최근에 올라온 글