入门
基础
- 动态路由匹配 Dynamic Route Matching
- 路由的匹配语法 Routes' Matching Syntax
- 嵌套路由 Nested Routes
- 编程式导航 Programmatic Navigation
- 命名路由 Named Routes
- 命名视图 Named Views
- 重定向和别名 Redirect and Alias
- 路由组件传参 Passing Props to Route Components
- 不同的历史记录模式 Different History modes
进阶
- 导航守卫 Navigation guards
- 导航故障 Navigation Failures
- 路由元信息 Route Meta Fields
- 数据获取 Data Fetching
- 组合式 API Composition API
- 过渡动效 Transitions
- 滚动行为 Scroll Behavior
- 路由懒加载 Lazy Loading Routes
- 类型化路由 Typed Routes
- 扩展路由链接 Extending RouterLink
- 动态路由 Dynamic Routing
迁移
API 手册
接口
- 历史记录状态 HistoryState
- 导航故障 NavigationFailure
- 导航卫士 NavigationGuard
- 导航卫士下一页 NavigationGuardNext
- 导航卫士用这个 NavigationGuardWithThis
- 导航后 NavigationHookAfter
- 路由位置 RouteLocation
- 路由位置匹配 RouteLocationMatched
- 路由位置规范化 RouteLocationNormalized
- 路线位置规范加载 RouteLocationNormalizedLoaded
- 路由位置选项 RouteLocationOptions
- 路线梅塔 RouteMeta
- 路由记录规范化 RouteRecordNormalized
- 路由器 Router
- 路由器历史 RouterHistory
- 路由器链接配置文件 RouterLinkProps
- 路由器选项 RouterOptions
- 路由器滚动行为 RouterScrollBehavior
- 路由器视图Props RouterViewProps
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
嵌套路由 Nested Routes
vue-router嵌套路由的使用方法
一些应用程序的 UI 由多层嵌套的组件组成。在这种情况下,URL 的片段通常对应于特定的嵌套组件结构,例如:
/user/johnny/profile /user/johnny/posts
+------------------+ +-----------------+
| User | | User |
| +--------------+ | | +-------------+ |
| | Profile | | +------------> | | Posts | |
| | | | | | | |
| +--------------+ | | +-------------+ |
+------------------+ +-----------------+
通过 Vue Router,你可以使用嵌套路由配置来表达这种关系。
接着上节创建的 app :
html<div id="app">
<router-view></router-view>
</div>
jsconst User = {
template: '<div>User {{ $route.params.id }}</div>',
}
// 这些都会传递给 `createRouter`
const routes = [{ path: '/user/:id', component: User }]
这里的 <router-view>
是一个顶层的 router-view
。它渲染顶层路由匹配的组件。同样地,一个被渲染的组件也可以包含自己嵌套的 <router-view>
。例如,如果我们在 User
组件的模板内添加一个 <router-view>
:
const User = {
template: `
<div class="user">
<h2>User {{ $route.params.id }}</h2>
<router-view></router-view>
</div>
`,
}
要将组件渲染到这个嵌套的 router-view
中,我们需要在路由中配置 children
:
const routes = [
{
path: '/user/:id',
component: User,
children: [
{
// 当 /user/:id/profile 匹配成功
// UserProfile 将被渲染到 User 的 <router-view> 内部
path: 'profile',
component: UserProfile,
},
{
// 当 /user/:id/posts 匹配成功
// UserPosts 将被渲染到 User 的 <router-view> 内部
path: 'posts',
component: UserPosts,
},
],
},
]
注意,以 /
开头的嵌套路径将被视为根路径。这允许你利用组件嵌套,而不必使用嵌套的 URL。
如你所见,children
配置只是另一个路由数组,就像 routes
本身一样。因此,你可以根据自己的需要,不断地嵌套视图。
此时,按照上面的配置,当你访问 /user/eduardo
时,在 User
的 router-view
里面什么都不会呈现,因为没有匹配到嵌套路由。也许你确实想在那里渲染一些东西。在这种情况下,你可以提供一个空的嵌套路径:
const routes = [
{
path: '/user/:id',
component: User,
children: [
// 当 /user/:id 匹配成功
// UserHome 将被渲染到 User 的 <router-view> 内部
{ path: '', component: UserHome },
// ...其他子路由
],
},
]
这个例子的 demo 可以在这里找到。
嵌套的命名路由
在处理命名路由时,你通常会给子路由命名:
jsconst routes = [
{
path: '/user/:id',
component: User,
// 请注意,只有子路由具有名称
children: [{ path: '', name: 'user', component: UserHome }],
},
]
这将确保导航到 /user/:id
时始终显示嵌套路由。
在一些场景中,你可能希望导航到命名路由而不导航到嵌套路由。例如,你想导航 /user/:id
而不显示嵌套路由。那样的话,你还可以命名父路由,但请注意重新加载页面将始终显示嵌套的子路由,因为它被视为指向路径/users/:id
的导航,而不是命名路由:
const routes = [
{
path: '/user/:id',
name: 'user-parent',
component: User,
children: [{ path: '', name: 'user', component: UserHome }],
},
]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论