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

AngularJS迁移至Angular遇NG0202错误:构造器与DI不兼容

解决Angular NG0202依赖注入错误(UpgradeModule相关)

解决步骤

  • 在AppModule构造函数的UpgradeModule参数上添加@Inject显式声明依赖:
    import { Inject, DoBootstrap, NgModule } from '@angular/core';
    import { BrowserModule } from '@angular/platform-browser';
    import { UpgradeModule } from '@angular/upgrade/static';
    import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
    
    @NgModule({
        imports: [
            BrowserModule,
            UpgradeModule
        ],
    })
    export class AppModule implements DoBootstrap {
        constructor(@Inject(UpgradeModule) private upgrade: UpgradeModule) { }
        ngDoBootstrap() {
            this.upgrade.bootstrap(document.body, ['CoreApplication'], { strictDi: true });
        }
    }
    
    platformBrowserDynamic().bootstrapModule(AppModule);
    
  • 检查并确保tsconfig.json中compilerOptions.emitDecoratorMetadata设置为true(JIT编译模式下必须开启):
    {
      "compilerOptions": {
        "emitDecoratorMetadata": true,
        // 其他配置...
      }
    }
    
  • 验证importmap中@angular/upgrade/static的映射路径是否正确,确保指向对应的ES模块文件。

问题原因

你遇到的NG0202错误,本质是Angular依赖注入系统无法识别AppModule构造函数中第一个参数(UpgradeModule)的有效依赖类型。从你提供的AppModule_Factory函数代码可以看到,编译器生成了jit___invalidFactoryDep_1(0),说明它无法自动解析UpgradeModule的DI元数据。

结合你调试发现的provider.deps: []空数组,进一步确认DI系统没有正确识别构造函数的依赖项。这种情况通常出现在JIT编译模式下,当类型元数据丢失、模块路径解析异常(比如使用importmap时的映射问题)时,Angular无法自动推断依赖类型。

显式添加@Inject装饰器可以强制告诉DI系统该参数的依赖类型,绕过自动类型识别的缺陷;开启emitDecoratorMetadata则确保编译器能生成必要的元数据供DI系统使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 11:24:10