Skip to content

路由视图

<elf-router-view> 渲染当前路由选中的组件。它支持默认和命名视图、嵌套层级、props、作用域插槽与内置页面过渡 class。

默认出口与嵌套出口

根应用通常在深度 0 放置默认视图:

html
<elf-router-view></elf-router-view>

嵌套路由时,在父页面中放置子出口。如果布局本身并不是由根出口渲染,则显式设置 depth="1"

html
<!-- settings-layout -->
<nav>...</nav>
<elf-router-view depth="1"></elf-router-view>

命名视图

使用 components 的路由记录可以填充多个出口。无 name 的出口读取 defaultname="aside" 的出口读取 aside

ts
{
  path: "/reports",
  components: {
    default: () => import("../pages/report-page"),
    aside: () => import("../pages/report-aside")
  }
}
html
<main><elf-router-view></elf-router-view></main>
<aside><elf-router-view name="aside"></elf-router-view></aside>

通过插槽读取已渲染的路由

默认作用域插槽接收 Component(也可写作 component)、routerecordpropsdepthname。当页面外壳需要插入加载/错误边界,或自行选择元素包装结构时很有用。

html
<elf-router-view>
  <template #default="{ Component, route, props }">
    <section class="page" :data-route="${route.name}">
      <Component ...${props}></Component>
    </section>
  </template>
</elf-router-view>

页面属性应通过路由记录的 props 配置提供,插槽中的 props 会暴露相同的结果。命名视图使用以视图名为键的 props map。

页面过渡

在出口上设置 transition 和可选的时长。替换页面时,路由器会按过渡名称添加 enter/leave class。

html
<elf-router-view transition="fade" duration="200"></elf-router-view>
css
.fade-enter-active,
.fade-leave-active {
  transition: opacity 0.2s ease;
}
.fade-enter-from,
.fade-leave-to {
  opacity: 0;
}

懒加载路由模块会跨 RouterView 缓存。模块可以默认导出页面组件,或只导出一个可识别的组件。