angular - 如何在全局错误处理程序中正确重定向

标签 angular error-handling angular-ui-router

我有这个全局错误处理程序:

import { ErrorHandler, Injectable, Injector } from '@angular/core';
import { Router } from '@angular/router';

    @Injectable()
    export class GlobalErrorHandler extends ErrorHandler  
    {
        constructor(private injector: Injector) {
            super(false);
        }

        handleError(error) {
            super.handleError(error);
            const router = this.injector.get(Router);
                router.navigateByUrl('/error');
        }

    }

我把它放在app.module中:

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

为了对此进行测试,我在服务中抛出了一个错误。由于某种原因,错误组件与页面的其他内容一起显示。像这样:

如果我通过转到/error 来测试错误组件,它会像这样显示(错误页面是一个只有一行的段落):

Sorry, something went wrong!

但是当我转到应该触发错误的主页时,它显示如下:

Sorry, something went wrong!

....
... Original content for /home
....

Sorry, something went wrong!

谁能告诉我我做错了什么?

更新

我已经更新到 angular-cli 1.5.2 并且还更新到 angular 5 并且错误似乎已修复。我可以使用路由器导航到错误页面。

最佳答案

我做了一些研究,这就是它这样表现的原因:

由于您在服务中抛出错误,正在使用该服务的组件无法销毁,因此路由器无法释放它。谢谢@TetraDev对于pointing this out .

虽然有人可能认为这是一个 Angular 错误,但我无法确认,因为我还没有找到相关的未解决问题(如果您有链接,请随时更新答案)。

为了解决您的问题,我建议在这种情况下不要使用 Router,而是执行浏览器重定向 window.location.href = '/error';

关于angular - 如何在全局错误处理程序中正确重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47288678/

相关文章:

angularjs - 如何使用 ui-router 在模板内获取路由参数?

javascript - 类型错误 : Cannot read property 'controller' of undefined

angular - TS2531 : Object is possibly 'null'

c - 检查 strInput 以通知用户输入对于程序来说太大时出错?

angular - 如何在多个组件之间使用 Angular 2 的 FormBuilder

c++ - 什么时候使用 exit() 与 C++ 中的异常比较好?

objective-c - Cocoa 的异常报告框架

javascript - Angularjs ui 路由器正则表达式

带有 ng 值访问器的 Angular Material 2 自定义组件

rest - 休息网络服务响应到来后如何呈现angular2 html页面