Конструктор класса UpgradeComponent не может быть вызван без ‘new’ после обновления до Angular 10

#angularjs #angular #angular-hybrid

#angularjs #angular #angular-hybrid

Вопрос:

Я только начал обновлять проект Angular с 9.1.0 до 10.0.12, это все еще гибридное приложение, в котором обновлено несколько компонентов (из Angular JS), как описано в Angular docs

Однако после обновления до Angular 10 эти обновленные компоненты не будут загружаться и приведут к следующей ошибке

Конструктор класса UpgradeComponent не может быть вызван без ‘new’ (в new MyUpgradedComponentDirective)

Я просмотрел список изменений и не нашел никакой информации об UpgradeComponent.

Ответ №1:

Изменение jit на true может быть не лучшим решением — это переключит директиву в режим, когда она скомпилирована во время выполнения браузера, вместо того, чтобы использоваться как предварительно скомпилированный JS-код.

Похоже, что проблема, описанная здесь, может быть решена с помощью установки tsconfig.json output свойства на ES2015 , если у вас там более старая версия.

Более подробную информацию можно найти здесь:https://github.com/angular/angular-cli/issues/18067

Ответ №2:

После бесконечного поиска без результатов я перешел в режим проб и ошибок.
Я обнаружил, что у jit есть @Directive свойство, если установлено значение true , указанная ошибка исчезнет.

При добавлении jit: true обновленный код компонента выглядит примерно так

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