Рассмотрим приложение Angular, которое использует класс ErrorHandlerService для обработки всех ошибок через app.module, например:
providers: [{ provide: ErrorHandler, useClass: ErrorHandlerService }]
В ErrorHandlerService ошибка обрабатывается путем отображения встроенного модального окна сообщения с модальным Bootstrap 4.
Если есть ошибка привязки шаблона, вызванная неиспользованием оператора безопасной навигации ?.
, вы можете получить бесконечное значение l oop, когда отображается модальное сообщение об ошибке.
Ошибка привязки шаблона может быть вызвана так, где bad
равно нулю:
<div *ngIf="bad.fake"></div
Когда приложение запускается, вы получаете ошибку, такую как:
Согласно обработчику ошибок, отображается модальное диалоговое окно. После закрытия модального диалога Angular снова запускает обнаружение изменений, вызывая тем самым цепочку событий: ошибка привязки шаблона -> handleError -> show modal. На данный момент приложение находится в бесконечном l oop и не может выйти без перезагрузки приложения или закрытия браузера.
Я попытался запустить показ / отклонение модального режима вне зоны Angular, используя этот метод: https://angular.io/api/core/NgZone#runoutsideangular но оно не вывело приложение из бесконечного l oop.
Создал простой Angular 6 проект, чтобы продемонстрировать эту проблему здесь: https://github.com/AneelaBrister/infinity
Просто запустите приложение, нажмите «Ошибка переключения», чтобы увидеть проблему. Держите консоль открытой.