Именованные представления
Иногда вам нужно отображать несколько представлений одновременно, а не вкладывать их друг в друга, например, создавать макет с представлением sidebar
и main
. В этом случае именованные представления пригодятся. Вместо одного единственного выхода в вашем представлении, вы можете иметь несколько и дать каждому из них имя. router-view
без имени будет иметь имя default
.
<router-view class="view left-sidebar" name="LeftSidebar" />
<router-view class="view main-content" />
<router-view class="view right-sidebar" name="RightSidebar" />
Представление рендерится с помощью компонента, поэтому для нескольких представлений требуется несколько компонентов для одного и того же маршрута. Обязательно используйте опцию components
(с окончанием s):
const router = createRouter({
history: createWebHashHistory(),
routes: [
{
path: '/',
components: {
default: Home,
// сокращение для LeftSidebar: LeftSidebar
LeftSidebar,
// они соответствуют атрибуту `name` на `<router-view>`
RightSidebar,
},
},
],
})
Рабочее демо этого примера можно найти здесь.
Вложенные именованные представления
Можно создавать сложные макеты, используя именованные представления вместе со вложенными. При этом вложенному router-view
также необходимо присвоить имя. Рассмотрим пример с панелью настроек:
/settings/emails /settings/profile
+-----------------------------------+ +------------------------------+
| UserSettings | | UserSettings |
| +-----+-------------------------+ | | +-----+--------------------+ |
| | Nav | UserEmailsSubscriptions | | +------------> | | Nav | UserProfile | |
| | +-------------------------+ | | | +--------------------+ |
| | | | | | | | UserProfilePreview | |
| +-----+-------------------------+ | | +-----+--------------------+ |
+-----------------------------------+ +------------------------------+
Nav
является обычным компонентомUserSettings
- родительский компонент представленияUserEmailsSubscriptions
,UserProfile
,UserProfilePreview
- вложенные компоненты представления
Примечание: Давайте забудем о том, как должен выглядеть HTML/CSS для представления такого макета, и сосредоточимся на используемых компонентах.
Секция <template>
для компонента UserSettings
в приведенном выше макете будет выглядеть примерно так:
<!-- UserSettings.vue -->
<div>
<h1>User Settings</h1>
<NavBar />
<router-view />
<router-view name="helper" />
</div>
Затем вы можете создать макет, как показано выше, с помощью этой конфигурации маршрута:
{
path: '/settings',
// Также можно иметь именованные представления в корне
component: UserSettings,
children: [{
path: 'emails',
component: UserEmailsSubscriptions
}, {
path: 'profile',
components: {
default: UserProfile,
helper: UserProfilePreview
}
}]
}
Рабоче демо этого примера можно найти здесь.