angular – 如何在全局错误处理程序中正确重定向
发布时间:2020-12-17 10:24:50 所属栏目:安全 来源:网络整理
导读:我有这个全局错误处理程序: import { ErrorHandler,Injectable,Injector } from '@angular/core';import { Router } from '@angular/router'; @Injectable() export class GlobalErrorHandler extends ErrorHandler { constructor(private injector: Inject
我有这个全局错误处理程序:
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 } ] 为了测试这个我在服务中抛出一个错误.由于某种原因,错误组件与页面的其他内容一起显示.像这样的东西: 如果我通过转到/错误测试错误组件它会显示如下(错误页面是一个单行的段落): Sorry,something went wrong! 但是当我进入我的主页时,错误应该触发它会显示如下: Sorry,something went wrong! .... ... Original content for /home .... Sorry,something went wrong! 有人可以告诉我,我做错了什么? 更新 我已经更新到angular-cli 1.5.2并且还更新到了角度5并且那里的bug似乎已经修复了.我可以使用路由器导航到错误页面.
我做了一些研究,这就是它的行为方式:
由于您在服务中抛出错误,因此无法销毁使用该服务的组件,因此路由器无法释放它.感谢@TetraDev pointing this out. 虽然有人可能认为这是一个Angular错误我无法确认,因为我没有找到一个关于它的公开问题(如果你有链接,请随时更新答案). 为了解决您的问题,我建议不要在这种情况下使用路由器并执行浏览器重定向window.location.href =’/ error’;代替. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |