浅谈angular异常处理的方法
Admin 2021-05-24 群英技术资讯 1246 次浏览
在开发过程中,遇到异常错误是比较常见的,因此掌握异常处理很有必要。那么如果是未知异常我们要如何处理呢?下面给大家分享关于angular 异常处理的内容,感兴趣的朋友可以参考。
代码写得再好,始终都无法完整的处理所有可能产生异常,特别是生产环境中的应用,很大一部分是数据来自用户、远程,很难保证所有数据都按程序规定的产生。事实上,除非测试人员发现或者客户报告,否则都无法得知。因此,将应用产生的未可知异常进而上报是非常重要的环节。
Angular 默认情况下也提供了全局的异常管理,当发生异常时,会把它扔到 Console 控制台上。如果你在使用 NG-ZORRO 时,可能经常就会遇到 ICON 未加载的异常消息,这也是异常消息的一种:
core.js:5980 ERROR Error: [@ant-design/icons-angular]:the icon setting-o does not exist or is not registered. at IconNotFoundError (ant-design-icons-angular.js:94) at MapSubscriber.project (ant-design-icons-angular.js:222) at MapSubscriber._next (map.js:29) at MapSubscriber.next (Subscriber.js:49) at RefCountSubscriber._next (Subscriber.js:72) at RefCountSubscriber.next (Subscriber.js:49) at Subject.next (Subject.js:39) at ConnectableSubscriber._next (Subscriber.js:72) at ConnectableSubscriber.next (Subscriber.js:49) at CatchSubscriber.notifyNext (innerSubscribe.js:42)
而 Angular 是通过 ErrorHandler 统一管理异常消息,而且只需要覆盖其中的 handleError 方法并重新处理异常消息即可。
首先创建一个 custom-error-handler.ts 文件:
import { ErrorHandler, Injectable } from '@angular/core';
@Injectable()
export class CustomErrorHandler extends ErrorHandler {
handleError(error: any): void {
super.handleError(error);
}
}
CustomErrorHandler 可以完整的获取当前用户数据、当前异常消息对象等,并允许通过 HttpClient 上报给后端。
以下是 NG-ALAIN 的文档站,由于是使用 Google Analytics 来分析,只需要将异常消息转给 onerror 即可:
import { DOCUMENT } from '@angular/common';
import { ErrorHandler, Inject, Injectable } from '@angular/core';
@Injectable()
export class CustomErrorHandler extends ErrorHandler {
constructor(@Inject(DOCUMENT) private doc: any) {
super();
}
handleError(error: any): void {
try {
super.handleError(error);
} catch (e) {
this.reportError(e);
}
this.reportError(error);
}
private reportError(error: string | Error): void {
const win = this.doc.defaultView as any;
if (win && win.onerror) {
if (typeof error === 'string') {
win.onerror(error);
} else {
win.onerror(error.message, undefined, undefined, undefined, error);
}
}
}
}
最后,在 AppModule 模块内注册 CustomErrorHandler :
@NgModule({
providers: [
{ provide: ErrorHandler, useClass: CustomErrorHandler },
]
})
export class AppModule { }
事实上还有一项非常重要的工作,生产环境中都是打包压缩过后的,换言之所产生的异常消息也是无法与实际代码行数相同的数字,这就需要 SourceMap 的支持,当然正常的生产环境是不会发布这份文件的,所以如果想要得到正确的行列数,还是需要借助一层中间层,在后端利用 source-map 模块来解析出真正的行列数值。
Angular 的依赖注入(DI)系统可以使我们快速替换一些 Angular 内置模块,从而实现在不修改业务层面时快速解决一些特殊需求。
以上就是关于angular 异常处理的介绍了,希望对大家解决异常错误问题有帮助,当然异常处理还有很多方法,想要了解更多,可以关注其他相关文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要为大家介绍了前端取消请求及取消重复请求方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
Vue-Awesome 是基于 Vue.js 的 SVG 图标组件,内置图标来自 Font Awesome。本篇随笔先来上一个图标管理的界面效果,然后在逐一进行介绍Element内置图标和Vue-Awesome的图标吧。
在面向对象语言中,接口是一个很重要的概念,它是对行为的抽象。接口也叫 interface 。在 js 中没有接口这个概念,它是新增的。该如何定义呢?下面来一起学习吧
这篇文章主要介绍了vantUI 获得piker选中值的自定义ID操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Next.js 是一个轻量级的 React 服务端渲染应用框架。文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008