Vue面试题46:在什么场景下要使用嵌套路由?(总结自B站up主‘前端杨村长’视频,仅供自用学习)
-
分析
- 应用的有些界面是由多层级组件组合而来的,这种情况下,url各部分通常对应某个嵌套的组件,这时就可以通过vue-router的嵌套路由配置来表达这种关系
-
思路
- 概念和使用场景;
- 使用方式;
- 实现原理;
-
回答范例
- 平时开发中,应用的有些界面是由多层级组件组合而来的,这种情况下,url各部分通常对应某个嵌套的组件,vue-router中可以使用嵌套路由配置来表达这种关系;
- 表现形式是在两个路由间切换时,它们有公用的视图内容。此时通常提取一个父组件,内部需要变更的位置放上
<router-view>
,从而形成物理上的嵌套,和逻辑上的嵌套对应起来,即定义嵌套路由时使用children
属性组织嵌套关系; - 原理上是在router-view组件内部判断其所处嵌套层级的深度,将这个深度作为匹配组件数组matched的索引,进而获取对应渲染组件并将其渲染;
-
原理
- router-view获取自己所在的深度:默认0,加1之后传给后代,同时根据深度获取匹配路由:
-
//源码 const injectedDepth = inject(viewDepthKey, 0) // The depth changes based on empty components option, which allows passthrough routes e.g. routes with children // that are used to reuse the `path` property const depth = computed<number>(() => { let initialDepth = unref(injectedDepth) const { matched } = routeToDisplay.value let matchedRoute: RouteLocationMatched | undefined while ( (matchedRoute = matched[initialDepth]) && !matchedRoute.components ) { initialDepth++ } return initialDepth }) const matchedRouteRef = computed<RouteLocationMatched | undefined>( () => routeToDisplay.value.matched[depth.value] ) provide( viewDepthKey, computed(() => depth.value + 1) )
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!