You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue Router 4中如何获取当前路由的子路由?

解决Vue Router 4无法获取子路由的问题

问题原因

useRoute()返回的route对象的children属性并非指向你在路由配置中定义的子路由——这个属性是Vue Router内部用于嵌套路由渲染上下文的,而非暴露配置中的子路由列表。

解决方案

要获取路由配置中定义的子路由,需要使用route.matched数组。这个数组包含了当前URL匹配到的所有路由记录,每条记录都保留了配置中的children属性。

实现代码

以下是通用导航组件的完整实现,支持响应式更新:

<template>
  <nav class="sub-nav">
    <router-link
      v-for="childRoute in childRoutes"
      :key="childRoute.name"
      :to="{ name: childRoute.name }"
      active-class="active"
    >
      {{ childRoute.meta.title }}
    </router-link>
  </nav>
</template>

<script setup>
import { useRoute } from 'vue-router';
import { computed } from 'vue';

const route = useRoute();

// 响应式获取当前路由的子路由列表
const childRoutes = computed(() => {
  // 获取当前匹配的最后一条路由记录
  const currentRouteRecord = route.matched.at(-1);
  // 处理无子女路由的情况,返回空数组
  return currentRouteRecord.children || [];
});
</script>

关键说明

  1. route.matched数组:包含了从根路由到当前路由的所有匹配记录,例如访问/users/images时,数组会包含users和userImages两条记录。
  2. 响应式计算:使用computed包裹可以确保路由切换时,导航链接自动更新。
  3. 路由链接渲染:通过router-link的name属性跳转,比使用path更健壮,避免路由路径变更导致的链接失效。

内容的提问来源于stack exchange,提问作者Happo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 11:07:46