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

Vue Router嵌套路由问题:子组件MainForm未加载

修复Vue Router嵌套路由同时加载NavBar和MainForm的问题

这问题我之前也碰到过,核心原因有两个:父组件缺少<router-view>容器和子路由路径配置错误,咱们一步步来解决:

1. 给NavBar组件添加<router-view>

嵌套路由的子组件(这里是MainForm)需要在父组件(NavBar)的<router-view>标签中渲染,没有这个容器的话,Vue Router根本不知道该把MainForm放在哪里,自然不会触发它的生命周期钩子。

修改你的NavBar组件模板,加上<router-view>:

<template>
  <div class="nav-bar">
    <!-- 这里是你原有的导航栏内容 -->
    <p>导航栏内容...</p>
    <!-- 必须添加这个标签,用来渲染子路由组件 -->
    <router-view></router-view>
  </div>
</template>

<script>
export default {
  name: 'NavBar'
}
</script>

2. 修正路由配置的路径问题

你之前的子路由用了绝对路径/form/:id,这会让它直接匹配根路由下的路径,而不是作为NavBar的子路由。我们需要改成相对路径,或者调整父路由的路径结构,这里给你两种可行方案:

方案一:保持父路由为空路径,子路由用相对路径

import MainForm from '@/components/MainForm'; 
import NavBar from '@/components/NavBar'; 
Vue.use(Router); 

export default new Router({ 
  routes: [ 
    { 
      path: '', 
      component: NavBar, 
      children: [ 
        // 去掉开头的斜杠,使用相对路径
        { path: 'form/:id', component: MainForm } 
      ] 
    }, 
    { path: '/formNoNavBar/:id', component: MainForm } 
  ] 
}); 

方案二:调整父路由路径为/form,子路由用/:id(结构更清晰)

import MainForm from '@/components/MainForm'; 
import NavBar from '@/components/NavBar'; 
Vue.use(Router); 

export default new Router({ 
  routes: [ 
    { 
      path: '/form', 
      component: NavBar, 
      children: [ 
        // 子路由相对父路由,直接写`:id`即可
        { path: ':id', component: MainForm } 
      ] 
    }, 
    { path: '/formNoNavBar/:id', component: MainForm } 
  ] 
}); 

为什么之前的配置不生效?

  • 没有<router-view>:子组件没有渲染的容器,即使路由匹配成功也无法显示,生命周期钩子自然不会触发。
  • 子路由用绝对路径:/form/:id会被当成独立的根路由,和父路由NavBar没有关联,所以只有NavBar渲染,MainForm不会被加载。

现在访问http://localhost:8080/#/form/sampleid,你会看到NavBar和MainForm同时渲染,MainForm的created钩子也会输出heya啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:37:37