跳至内容

命名视图

有时您需要同时显示多个视图,而不是将它们嵌套,例如创建一个带有 `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**)选项

js
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 应该如何看起来来表示这样的布局,而专注于使用的组件。

上面布局中 `UserSettings` 组件的 `<template>` 部分将如下所示

模板
<!-- UserSettings.vue -->
<div>
  <h1>User Settings</h1>
  <NavBar />
  <router-view />
  <router-view name="helper" />
</div>

然后,您可以使用此路由配置来实现上面的布局

js
{
  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
    }
  }]
}

可以在 这里 找到此示例的工作演示。