【发布时间】:2018-06-14 00:48:58
【问题描述】:
我正在为我的 Angular 应用程序构建一个自定义错误处理程序来处理错误,然后将错误添加到列表中以显示给用户。错误处理程序按预期工作;它捕获错误,使用 Angular Injector,获取将错误添加到列表所需的服务实例,并将其添加到列表中。然后该服务应该使用 Rxjs Subject.next() 函数将该列表发送给所有订阅该列表的人。这就是奇怪发生的地方。
关于背景信息,我设置了一个对无效 URL 进行 HTTP 调用的按钮,以便按需创建错误并可以被应用程序捕获。
第一次单击按钮时,会出现错误,它会被捕获并发送到服务,但它不会显示在页面上(循环该列表以将它们输出到组件中)。第二次单击该按钮时,屏幕上会显示错误。与第三个和第四个相同,但屏幕上的警报总是比数组中少一个。
然后,当您第一次从数组中删除警报时,它肯定会被删除,但您无法判断,因为额外的警报最终会显示。后续点击会删除其他警报。
现在让我们回到向数组添加警报。第一次单击该按钮时,屏幕上没有任何反应,但如果您console.log 数组,您可以看到它已向数组中添加了一个项目。再次单击它,屏幕上会显示一条警报。
因此,如果有意义的话,似乎每次点击实际上都会发出或传递数组,比您预期的要晚一次。我不确定为什么会这样。这应该很简单。任何帮助将不胜感激。
您可以查看工作示例on StackBlitz here。
【问题讨论】:
-
演示我们抛出编译器错误
Can't resolve all parameters for ErrorHandlerService: -
@martin 你还在看这个吗?打开项目时,我没有看到任何编译器错误。
-
一切都按预期工作。问题是没有任何东西触发更改检测。此时。