Существуют ли альтернативы ngUpgrade для одновременного запуска angular и angularjs или способ отказаться от триггеров $ digest ngUpgrade?
У меня довольно большое приложение angular.js 1.6, которое я хотел бы перенести на Angular, но использование ngUpgrade вызывает слишком много $ дайджестов для запуска (т.е. каждый раз Zone.onMicrotaskEmpty
уволен). К сожалению, приложение, которое я переношу, уже не слишком велико с точки зрения производительности, поэтому каждый дополнительный $ дайджест - довольно большое дело. Хотя я могу смягчить это несколько ngZone.runOutsideAngular()
что мне действительно нужно, так это полностью отключить автоматический запуск $ digests из модуля обновления и просто вручную запускать их при необходимости; Так как приложение состоит из грубых компонентов, которые я буду мигрировать по одному, не потребуется особых изменений в Angular для запуска $ digest в angular.js.
Вот несколько возможных решений, которые я рассматриваю; являются ли какие-либо из них более "стандартными" (или менее рискованными / подверженными ошибкам), чем другие?
- Используйте локально измененную версию ngUpgrade с вызовом
rootScope.$digest()
удален - Размещать обновленные компоненты Angular в фрейме и использовать
postMessage()
для взаимодействия с приложением - Размещать обновленные компоненты Angular в веб-компоненте (еще не изучено, как в этом случае будет работать связь)
- Загрузите как angular.js, так и приложение Angular из одного документа, позволяя им обрабатывать свои собственные директивы / компоненты на странице
Обновление (8/23): на данный момент я даю вариант 1 (локально изменяя файл обновления js); в то время как я обычно предпочитаю избегать таких вещей, это кажется самой безопасной ставкой на данный момент.
1 ответ
Есть два способа загрузить гибридное приложение:
UpgradeModule - запускает как AngularJS (v1), так и Angular (v6) фреймворки в угловой зоне
DowngradeModule - запускает AngularJS за пределами угловой зоны и разделяет две системы обнаружения изменений.
Я пробовал оба пути. Чтобы избежать всех проблем с $digest
и производительность я рекомендую использовать DowngradeModule