真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

Angular中常用的錯誤處理方式有哪些

本篇內容主要講解“Angular中常用的錯誤處理方式有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Angular中常用的錯誤處理方式有哪些”吧!

成都創(chuàng)新互聯(lián)公司專注于虎丘企業(yè)網站建設,成都響應式網站建設公司,商城建設?;⑶鹁W站建設公司,為虎丘等地區(qū)提供建站服務。全流程按需定制設計,專業(yè)設計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務

什么是Angular

Angualr 是一款來自谷歌的開源的 web 前端框架,誕生于 2009 年,由 Misko Hevery 等人創(chuàng)建,后為 Google 所收購。是一款優(yōu)秀的前端 JS 框架,已經被用于 Google 的多款產品當中。

AngularJS 是基于聲明式編程模式 是用戶可以基于業(yè)務邏輯進行開發(fā). 該框架基于HTML的內容填充并做了雙向數據綁定從而完成了自動數據同步機制. 最后, AngularJS 強化的DOM操作增強了可測試性.

try/catch

最熟悉的的方式,就是在代碼中添加try/catch塊,在try中發(fā)生錯誤,就會被捕獲并且讓腳本繼續(xù)執(zhí)行。然而,隨著應用程序規(guī)模的擴大,這種方式將變得無法管理。

ErrorHandler

Angular提供了一個默認的ErrorHandler,可以將錯誤消息打印到控制臺,因此可以攔截這個默認行為來添加自定義的處理邏輯,下面嘗試編寫錯誤處理類:

import { ErrorHandler, Injectable } from "@angular/core";
import { HttpErrorResponse } from "@angular/common/http";

@Injectable()
export class ErrorsHandler implements ErrorHandler {
  handleError(error: Error | HttpErrorResponse) {
    if (!navigator.onLine) {
      console.error("Browser Offline!");
    } else {
      if (error instanceof HttpErrorResponse) {
        if (!navigator.onLine) {
          console.error("Browser Offline!");
        } else {
          // Handle Http Error (4xx, 5xx, ect.)
          console.error("Http Error!");
        }
      } else {
        // Handle Client Error (Angular Error, ReferenceError...)
        console.error("Client Error!");
      }
      console.error(error);
    }
  }
}

通常在app下創(chuàng)建一個共享目錄shared,并將此文件放在providers文件夾中

現在,需要更改應用程序的默認行為,以使用我們自定義的類而不是ErrorHandler。修改app.module.ts文件,從@angular/core導入ErrorHandler,并將providers添加到@NgModule模塊,代碼如下:

import { NgModule, ErrorHandler } from "@angular/core";
import { BrowserModule } from "@angular/platform-browser";
import { FormsModule } from "@angular/forms";

// Providers
import { ErrorsHandler } from "./shared/providers/error-handler";

import { AppComponent } from "./app.component";

@NgModule({
  imports: [BrowserModule, FormsModule],
  declarations: [AppComponent],
  providers: [{ provide: ErrorHandler, useClass: ErrorsHandler }],
  bootstrap: [AppComponent]
})
export class AppModule {}

HttpInterceptor

HttpInterceptor提供了一種攔截HTTP請求/響應的方法,就可以在傳遞它們之前處理。例如,可以在拋出錯誤之前重試幾次HTTP請求。這樣,就可以優(yōu)雅地處理超時,而不必拋出錯誤。

還可以在拋出錯誤之前檢查錯誤的狀態(tài),使用攔截器,可以檢查401狀態(tài)錯誤碼,將用戶重定向到登錄頁面。

import { Injectable } from "@angular/core";
import { HttpEvent, HttpRequest, HttpHandler, HttpInterceptor, HttpErrorResponse } from "@angular/common/http";
import { Observable, throwError } from "rxjs";
import { retry, catchError } from "rxjs/operators";

@Injectable()
export class HttpsInterceptor implements HttpInterceptor {
  intercept(request: HttpRequest, next: HttpHandler): Observable> {
    return next.handle(request).pipe(
      retry(1),
      catchError((error: HttpErrorResponse) => {
        if (error.status === 401) {
          // 跳轉到登錄頁面
        } else {
          return throwError(error);
        }
      })
    );
  }
}

同樣需要添加到app.module.ts

import { NgModule, ErrorHandler } from "@angular/core";
import { HTTP_INTERCEPTORS } from "@angular/common/http";
import { BrowserModule } from "@angular/platform-browser";
import { FormsModule } from "@angular/forms";

// Providers
import { ErrorsHandler } from "./shared/providers/error-handler";
import { HttpsInterceptor } from "./shared/providers/http-interceptor";

import { AppComponent } from "./app.component";

@NgModule({
  imports: [BrowserModule, FormsModule],
  declarations: [AppComponent],
  providers: [
    { provide: ErrorHandler, useClass: ErrorsHandler },
    { provide: HTTP_INTERCEPTORS, useClass: HttpsInterceptor, multi: true }
  ],
  bootstrap: [AppComponent]
})
export class AppModule {}

多提供者用于創(chuàng)建可擴展服務,其中系統(tǒng)帶有一些默認提供者,也可以注冊其他提供者。默認提供程序和其他提供程序的組合將用于驅動系統(tǒng)的行為。

Notifications

在控制臺打印錯誤日志對于開發(fā)者來說非常友好,但是對于用戶來說則需要一種更加友好的方式來告訴這些錯誤何時從GUI中發(fā)生。根據錯誤類型,推薦兩個組件:SnackbarDialog

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部