Ошибка выполнения дайджеста Angularjs при использовании с гибридным приложением
Итак, у меня довольно громоздкое гибридное приложение, использующее angularjs 1.7 и angular 5.x. Я использую модуль ngUpgrade для запуска обоих приложений, однако я столкнулся с проблемой, когда, если я использую href для перехода на другой маршрут (определенный в маршрутизаторе angularjs), я получаю цикл дайджеста, который уже выполняется, и он разрывает все приложение и ничего не загружается (я предполагаю, что в этой точке angular работает за пределами зоны). Я смог решить эту проблему для других событий (щелчок и т. Д.) С помощью $ timeout, но я действительно хочу, чтобы href работал сейчас.
core.js:1449 ERROR Error: [$rootScope:inprog] $digest already in progress
https://errors.angularjs.org/1.7.3/$rootScope/inprog?p0=%24digest
at angular.js:138
at h (angular.js:19720)
at f.$digest (angular.js:19050)
at static.js:1508
at t.object.i [as _next] (core.js:4354)
at t.__tryOrUnsub (Subscriber.js:242)
at t.next (Subscriber.js:189)
at t._next (Subscriber.js:129)
at t.next (Subscriber.js:93)
at t.next (Subject.js:55)
1 ответ
Есть два способа загрузить гибридное приложение:
UpgradeModule - запускает как AngularJS (v1), так и Angular (v6) фреймворки в угловой зоне
DowngradeModule - запускает AngularJS за пределами угловой зоны и разделяет две системы обнаружения изменений.
У меня были такие же ошибки с $digest
и пробовал оба пути. Чтобы избежать всех проблем с $digest
и производительность вы должны использовать DowngradeModule
,
Посмотрите на https://github.com/angular/angular/issues/19299 и https://angular.io/guide/upgrade-performance