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)
        )
    
posted @   Mochenghualei  阅读(292)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示