Angular - 如何在组件级别实现异常处理

Posted

技术标签:

【中文标题】Angular - 如何在组件级别实现异常处理【英文标题】:Angular - How to implement Exception Handling on component level 【发布时间】:2018-07-01 00:41:48 【问题描述】:

在 Angular(Angular 4、5)内部工作时,如果组件引发 Error(TypeError 或 null 或未定义的错误等),整个应用程序会继续中断。

我们如何处理这个问题,在组件级别捕获错误并可能显示一个备用 UI,就像 React16 使用 Error Boundaries 所做的那样。

【问题讨论】:

目前支持覆盖 ErrorHandlerglobal 实现。您可以尝试使用组件装饰器的 providers 属性实例化一个覆盖组件级别默认实现的提供程序对象。 我已经覆盖了 global ErrorHandler。如果可以在组件级别提供它,那就太好了。你确定有可能吗? 对于你想要的东西来说可能太宽泛了,但overriding ExceptionHandler 是你自己的可能性。更详细的用法见this article。 似乎不可能在plnkr.co/edit/oZPbmFoqURuQQLqvpjKw?p=info 【参考方案1】:

我会通过在组件级别处理错误来处理它,并有一个服务来侦听组件或服务级别发生的任何错误。 例如:

    从服务中抛出错误 捕获组件中的错误 处理错误,处理它并将带有详细信息的错误事件发送到 ErrorService。 您可以拥有一个应用级组件“errorBannerComponent”,该组件从 ErrorService 获取输入并绘制您的 UI。 只要在 ErrorService 中收到错误,errorBannerComponent 就会在屏幕上显示错误。

希望对你有帮助。

另外默认情况下,Angular 自带了自己的 ErrorHandler 拦截我们应用程序中发生的所有错误并将它们记录到 控制台,防止应用程序崩溃。我们可以通过创建一个实现 ErrorHandler 的新类来修改这个默认行为:

您可以找到更多详细信息和example here:

【讨论】:

如果说ngAfterContentChecked生命周期方法引发undefined错误,如何在组件或服务内部捕获它。 那里的代码中一定有一些意想不到的事情发生。你应该检查你的代码。与其他功能相比,这些生命周期挂钩使用起来相对安全。 你可以在 stackblitz 分享你的代码,我可以看看。 React 的错误边界确保如果在运行时出现前所未有的错误,它不会使应用程序崩溃,用户也会看到一个回退的 UI。在编译/开发时不明显的运行时错误会使 Angular 应用程序崩溃。我想解决这个问题。 默认情况下,Angular自带了自己的ErrorHandler,它会拦截我们应用中发生的所有错误并将它们记录到控制台,防止应用崩溃。这可以通过创建一个实现 ErrorHandler 的新类来修改:您可以在此处阅读更多内容:medium.com/@aleixsuau/error-handling-angular-859d529fa53a

以上是关于Angular - 如何在组件级别实现异常处理的主要内容,如果未能解决你的问题,请参考以下文章

Highcharts - 工具提示的悬停事件处理抛出异常

angular 2 http异常处理程序和jwt刷新

应用程序的组件中发生了未经处理的异常,下方显示“调用的目标发生了异常”时如何解决?

无聊系列 - 教你怎么正确处理异常

java 中怎么将程序出现的异常信息保存到日志文件中

3dmax提示应用组件中发生了未经处理的异常,如何解决