Spec-Zone.ru › Vue Router 4

Вложенные маршруты

Посмотреть бесплатный урок на Vue School

Интерфейсы некоторых приложений состоят из компонентов, вложенных на несколько уровней. В этом случае часто сегменты URL соответствуют определённой структуре вложенных компонентов, например:

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

С Vue Router вы можете выразить эту связь с помощью конфигурации вложенных маршрутов.

Учитывая приложение, созданное в предыдущей главе:

<div id="app">
  <router-view></router-view>
</div>
const User = {
  template: '<div>User {{ $route.params.id }}</div>',
}

// these are passed to `createRouter`
const routes = [{ path: '/user/:id', component: User }]

Здесь <router-view> является верхнеуровневым router-view. Он отображает компонент, соответствующий верхнеуровневому маршруту. Аналогично, отображаемый компонент также может содержать собственные, вложенные <router-view>. Например, если мы добавим один внутри шаблона компонента User:

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

Чтобы отобразить компоненты в этот вложенный router-view, необходимо использовать опцию children в любом из маршрутов:

const routes = [
  {
    path: '/user/:id',
    component: User,
    children: [
      {
        // UserProfile will be rendered inside User's <router-view>
        // when /user/:id/profile is matched
        path: 'profile',
        component: UserProfile,
      },
      {
        // UserPosts will be rendered inside User's <router-view>
        // when /user/:id/posts is matched
        path: 'posts',
        component: UserPosts,
      },
    ],
  },
]

Обратите внимание, что вложенные пути, начинающиеся с /, будут обрабатываться как корневой путь. Это позволяет использовать вложенность компонентов без необходимости использования вложенного URL.

Как видите, опция children — это просто ещё один массив маршрутов, как и сам routes. Таким образом, вы можете продолжать вкладывать представления столько, сколько нужно.

В данный момент, с указанной конфигурацией, при посещении /user/eduardo, ничего не будет отображено внутри User's router-view, так как не соответствует ни один вложенный маршрут. Возможно, вы захотите отобразить что-то там. В этом случае вы можете предоставить пустой вложенный путь:

const routes = [
  {
    path: '/user/:id',
    component: User,
    children: [
      // UserHome will be rendered inside User's <router-view>
      // when /user/:id is matched
      { path: '', component: UserHome },

      // ...other sub routes
    ],
  },
]

Рабочий демонстрационный пример этого примера можно найти здесь.

Предложить изменения на этой странице
Синтаксис сопоставления маршрутов
Программная навигация

© 2013–present Evan You
Licensed under the MIT License.
https://next.router.vuejs.org/guide/essentials/nested-routes

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API