Legacy приложения часто построены на старых версиях AngularJS или на нестандартных фреймворках, что создаёт необходимость постепенной миграции к современному Angular. Процесс миграции требует системного подхода и понимания ключевых механизмов совместимости.
Angular предоставляет библиотеку @angular/upgrade, которая позволяет совмещать AngularJS и Angular в одном приложении. Основные шаги:
npm install @angular/upgrade
import { UpgradeModule } from '@angular/upgrade/static';
import { NgModule } from '@angular/core';
@NgModule({
imports: [UpgradeModule],
})
export class AppModule {
constructor(private upgrade: UpgradeModule) {}
ngDoBootstrap() {
this.upgrade.bootstrap(document.body, ['legacyApp']);
}
}
Лучшей практикой является постепенная миграция по модулям:
Сервисы AngularJS и Angular можно соединять через механизм downgradeInjectable и upgrade.injector. Пример:
import { downgradeInjectable } from '@angular/upgrade/static';
import { Injectable } from '@angular/core';
@Injectable()
export class NewService {
getData() { return 'данные'; }
}
angular.module('legacyApp')
.factory('NewService', downgradeInjectable(NewService));
Routing требует отдельного внимания, так как AngularJS использует
$routeProvider или ui-router, а Angular —
RouterModule. Рекомендуется:
upgradeModule.После интеграции необходимо убедиться в корректности работы:
$scope и
$digest после интеграции.Миграция legacy приложений требует тщательного планирования и поэтапного подхода, обеспечивающего непрерывную работу приложения при переходе на современный Angular.