【问题标题】:How to handle template errors (and other errors) in angular 2?如何处理 Angular 2 中的模板错误(和其他错误)?
【发布时间】:2017-03-27 07:49:58
【问题描述】:

当 Angular 2 中出现模板错误时,整个应用程序将无法运行。

不应该只有具有导致错误的模板的组件无法工作,而应用程序的其余部分工作正常吗?

如何处理错误,使应用程序在发生错误时不会停止响应?

【问题讨论】:

  • 您应该修复它们而不是发送带有错误的代码(:应用程序失败是一件好事。但是,您可以使用自定义 ErrorHandler...
  • 面临同样的问题,但似乎没有解决模板解析错误。 @harryjohn 你有没有解决这个问题??

标签: angular angular-template


【解决方案1】:

您可以使用自定义ErrorHandler:

class MyErrorHandler implements ErrorHandler {
  handleError(error) {
    // do something with the exception
  }
}
@NgModule({
  providers: [{provide: ErrorHandler, useClass: MyErrorHandler}]
})
class MyModule {}

【讨论】:

  • 很好的答案,但是当这个类调用时?加载应用程序?还是在某些特定组件上?,我应该在主模块中调用它吗? ,如果可以,请提供更多解释。谢谢
  • @PardeepJain 它是一个根提供程序,因此它应该适用于整个应用程序。我不知道如果您有多个带有延迟加载模块及其注入器的 ErrorHandler 会发生什么。我只写了其中两个:一个用于将错误保存到 firebase 的真实应用程序;其次是在使用 HMR 服务时停止那些烦人的区域异常并进行造型工作。但两者都像这个例子一样,提供者在AppModule 级别。我没有进一步探索它......
  • 好的,非常感谢您提供的信息,还有一件事我尝试了这个但抛出了一些错误,不知道是什么原因,我应该为 ErrorHandler 创建单独的模块吗?或者只是像你在回答中所做的那样在 appModule 中导入?
  • @PardeepJain 不需要单独的模块,除非你需要一个模块(:我把它放在我的应用程序的 CoreModule 中,但它应该没关系,只要它是在根级别提供的(由根注入器/在热切加载的模块中提供)。不确定我是否清楚,但只要你don't do this,你就很好(:
  • @Sasxa 考虑一个pipe,它有时会因传递给它的错误输入而引发错误。这些错误可能在运行时发生,在开发过程中不会被捕获。我的问题与此有关。有没有办法处理此类错误,以便除引发错误的组件之外的所有内容都按预期工作?
【解决方案2】:

在解析 Angular 模板或评估表达式时出现的错误无法由 Angular Errorrhandller 处理。这类错误需要修复。

您可以避免以下错误以防止发生模板错误: 不要在 *ngIf 、 *ngFor 等指令中绑定方法。 不要在可能会导致错误的指令中编写大表达式。在模板中保留最少的逻辑。

如果缺少任何东西,任何人都可以添加。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 2017-01-07
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    相关资源
    最近更新 更多