Angular 6: Браузер блокируется, если ошибка привязки шаблона обрабатывается с помощью bootstrap modal - PullRequest
0 голосов
/ 13 февраля 2020

Рассмотрим приложение Angular, которое использует класс ErrorHandlerService для обработки всех ошибок через app.module, например:

 providers: [{ provide: ErrorHandler, useClass: ErrorHandlerService }]

В ErrorHandlerService ошибка обрабатывается путем отображения встроенного модального окна сообщения с модальным Bootstrap 4.

Если есть ошибка привязки шаблона, вызванная неиспользованием оператора безопасной навигации ?., вы можете получить бесконечное значение l oop, когда отображается модальное сообщение об ошибке.

Ошибка привязки шаблона может быть вызвана так, где bad равно нулю:

<div *ngIf="bad.fake"></div

Когда приложение запускается, вы получаете ошибку, такую ​​как: enter image description here

Согласно обработчику ошибок, отображается модальное диалоговое окно. После закрытия модального диалога Angular снова запускает обнаружение изменений, вызывая тем самым цепочку событий: ошибка привязки шаблона -> handleError -> show modal. На данный момент приложение находится в бесконечном l oop и не может выйти без перезагрузки приложения или закрытия браузера.

Я попытался запустить показ / отклонение модального режима вне зоны Angular, используя этот метод: https://angular.io/api/core/NgZone#runoutsideangular но оно не вывело приложение из бесконечного l oop.

Создал простой Angular 6 проект, чтобы продемонстрировать эту проблему здесь: https://github.com/AneelaBrister/infinity

Просто запустите приложение, нажмите «Ошибка переключения», чтобы увидеть проблему. Держите консоль открытой.

...