更新到 Angular 10 后,如果没有“new”,就无法调用类构造函数 UpgradeComponent

Posted

技术标签:

【中文标题】更新到 Angular 10 后,如果没有“new”,就无法调用类构造函数 UpgradeComponent【英文标题】:Class constructor UpgradeComponent cannot be invoked without 'new' after Update to Angular 10 【发布时间】:2020-12-14 07:36:24 【问题描述】:

我刚开始将 Angular 项目从 9.1.0 升级到 10.0.12 它仍然是一个混合应用程序,并且有几个组件升级(来自 Angular JS),如 Angular docs

中所述

但是在更新到 Angular 10 之后,这些升级的组件将无法加载并导致以下错误

没有'new'就不能调用类构造函数UpgradeComponent(在新的MyUpgradedComponentDirective处)

我搜索了Changelog 并没有找到任何关于 UpgradeComponent 的信息。

【问题讨论】:

【参考方案1】:

jit 更改为 true 可能不是最好的解决方案 - 这会将指令切换到模式,当它在浏览器运行时编译时,而不是作为预编译的 JS 代码提供。

如果您有旧版本,这里描述的问题似乎可以通过将tsconfig.json output 属性设置为ES2015 来解决。

更多详情可以在这里找到:https://github.com/angular/angular-cli/issues/18067

【讨论】:

【参考方案2】:

在没有结果的无休止搜索之后,我进入了试错模式。 我发现@Directive 上有一个jit 属性,如果设置为true,上述错误就会消失。

添加jit: true 后,升级后的组件代码如下所示

@Directive(
    selector: 'my-angular-selector',
    jit: true,
)
export class MyDirective extends UpgradeComponent 
    constructor(elementRef: ElementRef, injector: Injector) 
        super('angularJsDirectiveSelector', elementRef, injector);
    

【讨论】:

以上是关于更新到 Angular 10 后,如果没有“new”,就无法调用类构造函数 UpgradeComponent的主要内容,如果未能解决你的问题,请参考以下文章

将 Angular 应用程序从 6 升级到 10 更新后会产生很多错误

v9升级后Angular应用程序冻结/无限加载而没有错误

在 IE10 中升级到 Angular2 RC5 后没有提供 PlatformRef 错误

Angular JS在更改后更新输入字段

升级到 9.0 和 angular 7 后修复 angular-redux/store

Angular 10 PWA 中 Chrome 更新后的新警告“无法安装站点:页面无法脱机工作。从 Chrome 93 开始...”