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

Vue3中出现injection 'Symbol(router)' not found及路由push报错求助

问题排查:injection "Symbol(router)" not found 及 TypeError: Cannot read properties of undefined (reading 'push')

常见原因及解决办法

  • Vue Router未正确注入Vue实例
    这是最核心的原因。如果项目入口文件(main.js/main.ts)里没完成路由的挂载,组件根本拿不到路由实例。检查入口代码,必须包含以下关键步骤:

    // main.js 示例代码
    import { createApp } from 'vue'
    import { createRouter, createWebHistory } from 'vue-router'
    import App from './App.vue'
    import About from './views/About.vue' // 按需引入你的页面组件
    
    // 配置路由规则
    const routes = [
      { path: '/about', component: About }
    ]
    
    // 创建路由实例
    const router = createRouter({
      history: createWebHistory(),
      routes
    })
    
    const app = createApp(App)
    app.use(router) // 必须调用此方法将路由注入Vue应用
    app.mount('#app')
    
  • useRouter导入方式不规范
    你当前用require("vue-router")导入,虽然CommonJS环境下能跑,但Vue3项目普遍用ES模块语法,建议改成:

    import { useRouter } from 'vue-router'
    

    这种写法更贴合Vue3生态,也能避免模块解析的潜在问题。

  • 组件不在路由上下文范围内
    如果这个组件是直接挂载在#app下,而非通过<router-view>渲染的路由组件,useRouter()也无法获取到路由实例。确保你的组件是路由配置里的目标组件,或者嵌套在路由组件内部。

  • 组件销毁后异步逻辑仍执行(可选优化)
    虽然你的setTimeout逻辑本身没问题,但如果组件在6秒内被销毁,router实例可能失效。可以加个清理逻辑:

    import { useRouter, onUnmounted } from 'vue-router'
    
    const router = useRouter()
    const timer = setTimeout(() => {
      router.push('/about')
    }, 6000)
    
    onUnmounted(() => {
      clearTimeout(timer)
    })
    

内容的提问来源于stack exchange,提问作者Sallah Eddine Laksari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:25:52