Именованные представления
Иногда необходимо отображать несколько представлений одновременно вместо их вложенности, например, создавая макет с представлением sidebar и представлением main. В таких случаях пригодятся именованные представления. Вместо одного единственного выхода в вашем представлении, вы можете иметь несколько и дать каждому из них имя. Представление router-view без имени получит имя default.
<router-view class="view left-sidebar" name="LeftSidebar"></router-view>
<router-view class="view main-content"></router-view>
<router-view class="view right-sidebar" name="RightSidebar"></router-view>
Представление отрисовывается с помощью компонента, поэтому несколько представлений требуют несколько компонентов для одного маршрута. Убедитесь, что вы используете опцию components (с s):
const router = createRouter({
history: createWebHashHistory(),
routes: [
{
path: '/',
components: {
default: Home,
// short for LeftSidebar: LeftSidebar
LeftSidebar,
// they match the `name` attribute on `<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',
// You could also have named views at the top
component: UserSettings,
children: [{
path: 'emails',
component: UserEmailsSubscriptions
}, {
path: 'profile',
components: {
default: UserProfile,
helper: UserProfilePreview
}
}]
}
Демонстрационный пример этого примера можно найти здесь.
© 2013–present Evan You
Licensed under the MIT License.
https://next.router.vuejs.org/guide/essentials/named-views