Vue Router предоставляет возможность организовывать маршрутизацию в
приложениях Vue не только с помощью одного компонента
<router-view>, но и с использованием
множественных RouterView для рендеринга
различных областей интерфейса одновременно. Это особенно полезно для
сложных интерфейсов с боковыми панелями, навигационными панелями,
модальными окнами и другими независимыми зонами контента.
В Vue Router каждая точка рендеринга компонентов маршрута
представлена компонентом <router-view>. По умолчанию
<router-view> рендерит компонент, указанный для
текущего пути. Множественные RouterView позволяют:
RouterViewЧтобы использовать несколько RouterView, необходимо
присвоить имена:
<template>
<div class="layout">
<header>
<router-view name="header"></router-view>
</header>
<main>
<router-view></router-view> <!-- default view -->
</main>
<aside>
<router-view name="sidebar"></router-view>
</aside>
</div>
</template>
Здесь:
name="header" — RouterView, который будет
отображать компонент маршрута с именем header.<router-view> без имени — default
view, основной контент.name="sidebar" — дополнительная область для боковой
панели.Для работы с именованными RouterView маршруты
определяются с использованием объекта components вместо
component:
const routes = [
{
path: '/dashboard',
components: {
default: DashboardMain,
header: DashboardHeader,
sidebar: DashboardSidebar
}
},
{
path: '/profile',
components: {
default: ProfileMain,
header: ProfileHeader,
sidebar: ProfileSidebar
}
}
];
const router = VueRouter.createRouter({
history: VueRouter.createWebHistory(),
routes
});
components должны совпадать с
атрибутами name в RouterView.default.RouterViewДля сложных интерфейсов с вложенными маршрутами можно комбинировать
множественные RouterView с вложенной
маршрутизацией:
const routes = [
{
path: '/dashboard',
components: {
default: DashboardMain,
header: DashboardHeader
},
children: [
{
path: 'analytics',
components: {
default: AnalyticsMain,
sidebar: AnalyticsSidebar
}
},
{
path: 'reports',
components: {
default: ReportsMain,
sidebar: ReportsSidebar
}
}
]
}
];
/dashboard рендерит
DashboardMain и DashboardHeader.analytics и reports
рендерят свои компоненты в default и sidebar.RouterView остаются на месте, а вложенные
управляют только своими областями.Vue Router позволяет подключать компоненты динамически с
использованием defineAsyncComponent или обычного
import:
const routes = [
{
path: '/dashboard',
components: {
default: () => import('./components/DashboardMain.vue'),
header: () => import('./components/DashboardHeader.vue'),
sidebar: () => import('./components/DashboardSidebar.vue')
}
}
];
RouterViewДля передачи параметров компонентам можно использовать свойство
props:
const routes = [
{
path: '/user/:id',
components: {
default: UserMain,
sidebar: UserSidebar
},
props: {
default: true,
sidebar: route => ({ userId: route.params.id })
}
}
];
default: true автоматически передает все параметры
маршрута.Навигация к маршрутам с множественными RouterView не
отличается от обычной:
router.push({ path: '/dashboard' });
router.push({ name: 'user', params: { id: 42 } });
RouterView только при
необходимости: слишком большое количество областей может
усложнить структуру приложения.RouterView.RouterView идеально подходят
для админ-панелей и сложных дашбордов.Хотите, я могу подготовить схему визуального представления
нескольких RouterView с маршрутами, чтобы сразу
было понятно, как они взаимодействуют? Это сильно упрощает
понимание.