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

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

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
主站蜘蛛池模板: 极品在线 | 日韩操比视频 | 国语第一次处破女 | 30分钟的高清视频在线观看 | 国产成人一区二区三区在线视频 | 黄a在线观看 | 色婷婷久久综合中文久久一本` | 99热这里只有精品免费 | 国产福利自产拍在线观看 | 欧美日韩一区二区三在线 | 911色_911色sss在线观看 | 91精品国产亚洲爽啪在线影院 | 亚洲黄色大片 | 免费观看无遮挡www的小视频 | 波多野结衣教师未删减版 | 91在线高清视频 | 国产第一草草影院 | 性直播免费 | 美女日b视频| 9久热这里只有精品免费 | 欧美69巨大jizzsex | 97se亚洲国产综合自在线观看 | 欧美一区二区三区综合色视频 | 超时空要爱国语完整版在线 | 亚洲精品第一国产综合高清 | 男公厕里同性做爰 | 男人操美女逼视频 | 好大好硬抽搐好爽想要 | 奇米网在线 | 日本中文字幕一区二区三区不卡 | 四虎网址大全 | 国产成人综合亚洲一区 | 大陆男男gayxxxxvideo | 色成人综合网 | yellow高清视频日本动漫 | 色综合精品 | 天美蜜桃精东乌鸦传媒 | 欧美a欧美1级 | 婷婷在线综合 | 欧美精品一区视频 | 好男人免费高清在线观看2019 |