Angular 2跳转至upload页面报错:Cannot set property 'router' of undefined求助
解决Angular中"Cannot set property 'router' of undefined"错误的方案
嘿,我一眼就看出问题所在啦——你没有正确使用Angular的依赖注入机制来获取Router实例,而且代码里还漏掉了关键的组件装饰器,这才导致了这个错误。下面一步步帮你修复:
核心问题分析
- 你的组件缺少
@Component装饰器,Angular根本识别不出这是一个组件,自然没法帮你注入Router服务; - 你直接把
Router类赋值给this.router,这完全是错误的用法——Router是一个服务,必须通过Angular的依赖注入来获取实例,而不是直接拿类本身赋值。
修复后的完整代码
import { Component, OnInit } from '@angular/core'; import { Router} from '@angular/router'; // 必须添加这个@Component装饰器,Angular才能识别这是一个组件 @Component({ selector: 'app-game-landing', // 这里换成你实际的组件选择器 templateUrl: './game-landing.component.html', // 对应你的组件模板路径 styleUrls: ['./game-landing.component.css'] // 对应你的组件样式路径 }) export class GameLandingComponent implements OnInit{ // 通过构造函数注入Router服务,Angular会自动帮你创建实例 constructor(private router: Router) { } ngOnInit(){ // 这里保留你原来的业务逻辑代码 // some codes and logics... // 使用注入好的Router实例进行跳转 this.router.navigateByUrl('/upload'); } }
额外需要确认的点
别忘了检查你的路由配置文件(一般是app-routing.module.ts),确保已经正确配置了/upload对应的路由:
import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; import { UploadComponent } from './upload/upload.component'; // 导入Upload组件 const routes: Routes = [ { path: 'upload', component: UploadComponent }, // 其他路由配置... ]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule] }) export class AppRoutingModule { }
这样修改之后,你应该就能顺利跳转到upload页面,不会再遇到那个undefined的错误啦!
内容的提问来源于stack exchange,提问作者Henry Lau




