考虑一个使用ErrorHandlerService类通过app.module处理所有错误的Angular应用,如下所示:
providers: [{ provide: ErrorHandler, useClass: ErrorHandlerService }]
在ErrorHandlerService中,通过显示使用Bootstrap 4的模态构建的模态消息框来处理错误。
如果由于未使用安全导航运算符?.
而导致模板绑定错误,则在显示错误模态时可以进入无限循环。
模板绑定错误可能是由于以下原因引起的,其中bad
为null:
<div *ngIf="bad.fake"></div
根据错误处理程序,将显示一个模式对话框。退出模态对话框后,Angular会再次触发更改检测,从而引起相同的事件链:模板绑定错误-> handleError->显示模态。此时,该应用程序处于无限循环中,必须重新加载应用程序或关闭浏览器才能退出。
我尝试使用https://angular.io/api/core/NgZone#runoutsideangular这种方法在Angular区域之外运行模态的显示/关闭,但是并没有使应用脱离无限循环。
创建了一个简单的Angular 6项目以在此处演示此问题:https://github.com/AneelaBrister/infinity
只需运行应用程序,单击“切换错误”即可查看问题。打开控制台。