Именованные представления
Иногда вам необходимо отображать сразу несколько представлений, а не вкладывать одно из них в другое — например, при создании шаблона с представлением sidebar
для боковой панели и представлением main
для основного содержимого. В этой ситуации будет удобно использовать именованные представления. Вместо указания единственного <router-view>
, можно использовать несколько, присвоив каждому собственное имя. Безымянный router-view
автоматически получает имя default
.
<router-view class="view one"></router-view>
<router-view class="view two" name="a"></router-view>
<router-view class="view three" name="b"></router-view>
При использовании нескольких представлений, вместо единственного компонента при описании пути необходимо указывать объект. Убедитесь, что в ключе components
используете окончание множественного числа (s
):
const router = new VueRouter({
routes: [
{
path: '/',
components: {
default: Foo,
a: Bar,
b: Baz
}
}
]
})
Рабочую демонстрацию этого примера можно найти здесь.
Вложенные именованные представления
Возможно и создание более сложных шаблонов, используя именованные представления с вложенными представлениями. При этом вам также нужно будет именовать используемые вложенные компоненты 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>Настройки пользователя</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
}
}]
}
Рабочую демонстрацию этого примера можно найти здесь.