一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - angularjs - Angular處理未可知異常錯誤的方法詳解

Angular處理未可知異常錯誤的方法詳解

2021-12-31 16:51cipchk angularjs

這篇文章主要給大家介紹了關于Angular如何處理未可知異常錯誤的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

寫在前面

代碼寫得再好,始終都無法完整的處理所有可能產生異常,特別是生產環境中的應用,很大一部分是數據來自用戶、遠程,很難保證所有數據都按程序規定的產生。事實上,除非測試人員發現或者客戶報告,否則都無法得知。因此,將應用產生的未可知異常進而上報是非常重要的環節。

Angular 默認情況下也提供了全局的異常管理,當發生異常時,會把它扔到 Console 控制臺上。如果你在使用 NG-ZORRO 時,可能經常就會遇到 ICON 未加載的異常消息,這也是異常消息的一種:

?
1
2
3
4
5
6
7
8
9
10
11
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 方法并重新處理異常消息即可。

ErrorHandler

首先創建一個 custom-error-handler.ts 文件:

?
1
2
3
4
5
6
7
8
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 即可:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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 :

?
1
2
3
4
5
6
@NgModule({
 providers: [
  { provide: ErrorHandler, useClass: CustomErrorHandler },
 ]
})
export class AppModule { }

結論

事實上還有一項非常重要的工作,生產環境中都是打包壓縮過后的,換言之所產生的異常消息也是無法與實際代碼行數相同的數字,這就需要 SourceMap 的支持,當然正常的生產環境是不會發布這份文件的,所以如果想要得到正確的行列數,還是需要借助一層中間層,在后端利用 source-map 模塊來解析出真正的行列數值。

Angular 的依賴注入(DI)系統可以使我們快速替換一些 Angular 內置模塊,從而實現在不修改業務層面時快速解決一些特殊需求。

總結

到此這篇關于Angular如何處理未可知異常錯誤的文章就介紹到這了,更多相關Angular處理未可知異常錯誤內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://segmentfault.com/a/1190000038999559

延伸 · 閱讀

精彩推薦
  • angularjsangularJS中router的使用指南

    angularJS中router的使用指南

    這篇文章主要介紹了angularJS中router的使用方法和示例分享,需要的朋友可以參考下...

    angularJS教程網8372022-01-03
  • angularjs教你用AngularJS框架一行JS代碼實現控件驗證效果

    教你用AngularJS框架一行JS代碼實現控件驗證效果

    簡單來說Angular.js是google開發者設計和開發的一套前端開發框架,幫助你簡化前端開發的負擔。到底能簡化到什么程度呢,今天我們來看下,一行代碼實現控...

    AngularJS教程網8012022-01-03
  • angularjsangularJS 中input示例分享

    angularJS 中input示例分享

    這篇文章主要介紹了angularJS 中input示例分享,需要的朋友可以參考下...

    angularJS教程網5652022-01-03
  • angularjsangularjs實現與服務器交互分享

    angularjs實現與服務器交互分享

    AngularJS是Google開發的純客戶端JavaScript技術的WEB框架,用于擴展、增強HTML功能,它專為構建強大的WEB應用而設計。...

    angularjs教程網7312022-01-03
  • angularjsangularJS提交表單(form)

    angularJS提交表單(form)

    這篇文章主要介紹了angularJS提交表單(form)的方法和示例,需要的朋友可以參考下...

    angularJS教程網3972022-01-03
  • angularjsAngular框架詳解之視圖抽象定義

    Angular框架詳解之視圖抽象定義

    這篇文章主要給大家介紹了關于Angular框架詳解之視圖抽象定義的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習...

    被刪6782022-02-24
  • angularjsAngularJS 中括號的作用詳解

    AngularJS 中括號的作用詳解

    這篇文章主要介紹了AngularJS 中括號的作用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下...

    Java Pro8652022-02-22
  • angularjsAngular.JS中指令的命名規則詳解

    Angular.JS中指令的命名規則詳解

    這篇文章主要給大家介紹了關于Angular.JS中指令命名規則的相關資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看...

    劉小光10402022-01-17
主站蜘蛛池模板: 奶茶视频官网免费 | 91在线免费看 | ai换脸明星造梦工厂忘忧草 | 91香蕉视频在线播放 | 亚洲福利区 | 男人的天堂在线观看免费 | 亚洲AV午夜福利精品香蕉麻豆 | 精品视频 久久久 | 大团圆6全文在线阅读 | 日本道高清 | 欧美日韩亚洲国内综合网香蕉 | 国产成人精品免费视频大全五级 | 国产二区视频在线观看 | 99精品影院| bt伙计最新合集 | 手机看片国产免费久久网 | 国产高清在线不卡 | 秋霞色 | 新影音先锋男人色资源网 | 国产麻豆精品免费视频 | 99re热这里只有精品视频 | 娇妻在床上迎合男人 | 91麻豆在线观看 | 美女全身体光羞羞漫画 | 99在线视频免费 | 操国产美女 | 日本理论片中文在线观看2828 | 久久sese| 黑人巨荃大战乌克兰美女 | 性欧美xxxxx老太婆 | 成人免费视频一区 | 亚洲国产精品一区二区三区久久 | 亚洲精品国产在线 | 99自拍网| 天天色影视综合网 | 贰佰麻豆剧果冻传媒一二三区 | 国产精品成人免费福利 | 91精品综合国产在线观看 | 美女狂揉尿口揉到失禁 | 日本精品一卡二卡≡卡四卡 | 久久中文电影 |