Skip to content

λ„€μž„λ“œ λ·° ​

λ•Œλ•Œλ‘œ λ·°λ₯Ό μ€‘μ²©ν•˜λŠ” λŒ€μ‹  μ—¬λŸ¬ λ·°λ₯Ό λ™μ‹œμ— ν‘œμ‹œν•΄μ•Ό ν•  λ•Œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, sidebar 뷰와 main λ·°κ°€ μžˆλŠ” λ ˆμ΄μ•„μ›ƒμ„ λ§Œλ“€ λ•Œ κ·Έλ ‡μŠ΅λ‹ˆλ‹€. 이럴 λ•Œ λ„€μž„λ“œ λ·°κ°€ μœ μš©ν•©λ‹ˆλ‹€. 뷰에 ν•˜λ‚˜μ˜ μ•„μ›ƒλ ›λ§Œ λ‘λŠ” λŒ€μ‹  μ—¬λŸ¬ 개λ₯Ό 두고 각각에 이름을 μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이름이 μ—†λŠ” router-viewλŠ” defaultλΌλŠ” 이름이 μžλ™μœΌλ‘œ λΆ€μ—¬λ©λ‹ˆλ‹€.

template
<router-view class="view left-sidebar" name="LeftSidebar" />
<router-view class="view main-content" />
<router-view class="view right-sidebar" name="RightSidebar" />

λ·°λŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ λ Œλ”λ§λ˜λ―€λ‘œ, μ—¬λŸ¬ λ·°μ—λŠ” λ™μΌν•œ λΌμš°νŠΈμ— λŒ€ν•΄ μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈκ°€ ν•„μš”ν•©λ‹ˆλ‹€. λ°˜λ“œμ‹œ components(sκ°€ λΆ™μŒ) μ˜΅μ…˜μ„ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€:

js
const router = createRouter({
  history: createWebHashHistory(),
  routes: [
    {
      path: '/',
      components: {
        default: Home,
        // LeftSidebar: LeftSidebar의 μΆ•μ•½ν˜•
        LeftSidebar,
        // 이듀은 `<router-view>`의 `name` 속성과 λ§€μΉ­λ©λ‹ˆλ‹€
        RightSidebar,
      },
    },
  ],
})

이 예제의 λ™μž‘ν•˜λŠ” 데λͺ¨λŠ” μ—¬κΈ°μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

쀑첩 λ„€μž„λ“œ λ·° ​

λ„€μž„λ“œ 뷰와 쀑첩 λ·°λ₯Ό μ‚¬μš©ν•˜μ—¬ λ³΅μž‘ν•œ λ ˆμ΄μ•„μ›ƒμ„ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ, μ€‘μ²©λœ router-view에도 이름을 μ§€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ„€μ • νŒ¨λ„ μ˜ˆμ‹œλ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€:

/settings/emails                                       /settings/profile
+-----------------------------------+                  +------------------------------+
| UserSettings                      |                  | UserSettings                 |
| +-----+-------------------------+ |                  | +-----+--------------------+ |
| | Nav | UserEmailsSubscriptions | |  +------------>  | | Nav | UserProfile        | |
| |     +-------------------------+ |                  | |     +--------------------+ |
| |     |                         | |                  | |     | UserProfilePreview | |
| +-----+-------------------------+ |                  | +-----+--------------------+ |
+-----------------------------------+                  +------------------------------+
  • NavλŠ” 일반 μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€
  • UserSettingsλŠ” λΆ€λͺ¨ λ·° μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€
  • UserEmailsSubscriptions, UserProfile, UserProfilePreviewλŠ” 쀑첩 λ·° μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€

μ°Έκ³ : μ΄λŸ¬ν•œ λ ˆμ΄μ•„μ›ƒμ„ ν‘œν˜„ν•˜κΈ° μœ„ν•œ HTML/CSSκ°€ μ–΄λ–»κ²Œ μƒκ²ΌλŠ”μ§€λŠ” μž μ‹œ 잊고, μ‚¬μš©λœ μ»΄ν¬λ„ŒνŠΈμ— μ§‘μ€‘ν•©μ‹œλ‹€.

μœ„ λ ˆμ΄μ•„μ›ƒμ—μ„œ UserSettings μ»΄ν¬λ„ŒνŠΈμ˜ <template> μ„Ήμ…˜μ€ λ‹€μŒκ³Ό λΉ„μŠ·ν•  κ²ƒμž…λ‹ˆλ‹€:

template
<!-- UserSettings.vue -->
<div>
  <h1>μ‚¬μš©μž μ„€μ •</h1>
  <NavBar />
  <router-view />
  <router-view name="helper" />
</div>

그런 λ‹€μŒ μ•„λž˜μ™€ 같은 라우트 μ„€μ •μœΌλ‘œ μœ„ λ ˆμ΄μ•„μ›ƒμ„ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

js
{
  path: '/settings',
  // μƒμœ„μ—μ„œλ„ λ„€μž„λ“œ λ·°λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€
  component: UserSettings,
  children: [
    {
      path: 'emails',
      component: UserEmailsSubscriptions
    },
    {
      path: 'profile',
      components: {
        default: UserProfile,
        helper: UserProfilePreview
      }
    }
  ]
}

이 예제의 λ™μž‘ν•˜λŠ” 데λͺ¨λŠ” μ—¬κΈ°μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ‘λ₯Ό μœ„ν•œ λ¬Έμ„œ ν•œκΈ€ν™”