ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 命名视图 有时候想同时 (同级) 展示多个视图,而不是嵌套展示,例如创建一个布局,有 `sidebar` (侧导航) 和 `main` (主内容) 两个视图,这个时候命名视图就派上用场了。你可以在界面中拥有多个单独命名的视图,而不是只有一个单独的出口。如果 `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 } } ] }) ~~~ 以上案例相关的可运行代码请[移步这里](https://jsfiddle.net/posva/6du90epg/) [](https://jsfiddle.net/posva/6du90epg/) 。 ## [#](https://router.vuejs.org/zh/guide/essentials/named-views.html#嵌套命名视图) 嵌套命名视图 我们也有可能使用命名视图创建嵌套视图的复杂布局。这时你也需要命名用到的嵌套 `router-view` 组件。我们以一个设置面板为例: ~~~ /settings/emails /settings/profile +-----------------------------------+ +------------------------------+ | UserSettings | | UserSettings | | +-----+-------------------------+ | | +-----+--------------------+ | | | Nav | UserEmailsSubscriptions | | +------------> | | Nav | UserProfile | | | | +-------------------------+ | | | +--------------------+ | | | | | | | | | UserProfilePreview | | | +-----+-------------------------+ | | +-----+--------------------+ | +-----------------------------------+ +------------------------------+ ~~~ * `Nav` 只是一个常规组件。 * `UserSettings` 是一个视图组件。 * `UserEmailsSubscriptions`、`UserProfile`、`UserProfilePreview` 是嵌套的视图组件。 **注意**:*我们先忘记 HTML/CSS 具体的布局的样子,只专注在用到的组件上。* `UserSettings` 组件的 `<template>` 部分应该是类似下面的这段代码: ~~~ <!-- UserSettings.vue --> <div> <h1>User Settings</h1> <NavBar/> <router-view/> <router-view name="helper"/> </div> ~~~ *嵌套的视图组件在此已经被忽略了,但是你可以在[这里](https://jsfiddle.net/posva/22wgksa3/)* *找到完整的源代码。* 然后你可以用这个路由配置完成该布局: ~~~ { path: '/settings', // 你也可以在顶级路由就配置命名视图 component: UserSettings, children: [{ path: 'emails', component: UserEmailsSubscriptions }, { path: 'profile', components: { default: UserProfile, helper: UserProfilePreview } }] } ~~~ 一个可以工作的示例的 demo 在[这里](https://jsfiddle.net/posva/22wgksa3/) [](https://jsfiddle.net/posva/22wgksa3/)。