Skip to content

命名视图

有时候向同时(同级)展示多个视图,而不是嵌套展示

js
<router-view class="view left-sidebar" name="LeftSidebar" />
<router-view class="view main-content" />
<router-view class="view right-sidebar" name="RightSidebar" />

这个时候命名视图就派上用场了。你可以在界面中拥有多个单独命名的视图,而不是只有一个单独的出口。如果 router-view 没有设置名字,那么默认为 default。

对于同个路由,多个视图就需要多个组件。确保正确使用 components 配置 (带上 s):

js
const router = createRouter({
  history: createWebHashHistory(),
  routes: [
    {
      path: '/',
      components: {
        default: Home,
        // LeftSidebar: LeftSidebar 的缩写
        LeftSidebar,
        // 它们与 `<router-view>` 上的 `name` 属性匹配
        RightSidebar,
      },
    },
  ],
})

嵌套命名视图

我们也有可能使用命名视图创建嵌套师傅的复杂布局.这是需要命名用到的嵌套router-view组件.以下面视图为例:

alt text

布局结构为:

alt text

  • Nav 是一个常规的组件
  • UserSetting是一个视图组件
  • UserEmailsSubscriptionsUserProfileUserProfilePreview 是嵌套的视图组件。

忽略CSS代码,UserSettings组件应该类似下面这段代码:

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

那么可以通过这段路由配置来实现上面的布局

js
{
  path: '/settings',
  // 你也可以在顶级路由就配置命名视图
  component: UserSettings,
  children: [{
    path: 'emails',
    component: UserEmailsSubscriptions
  }, {
    path: 'profile',
    components: {
      default: UserProfile,
      helper: UserProfilePreview
    }
  }]
}

需要注意:profile路由使用的是components