Существуют ли альтернативы 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 ответ

Есть два способа загрузить гибридное приложение:

  1. UpgradeModule - запускает как AngularJS (v1), так и Angular (v6) фреймворки в угловой зоне

  2. DowngradeModule - запускает AngularJS за пределами угловой зоны и разделяет две системы обнаружения изменений.

Я пробовал оба пути. Чтобы избежать всех проблем с $digest и производительность я рекомендую использовать DowngradeModule

Другие вопросы по тегам