Angular 中如何管理 HTTP 请求?

阅读时长 7 分钟读完

在 Angular 中,HTTP 请求是一个非常常见的需求。它是与后台交互数据的一种方式。但是,由于网络和服务器的不确定性,这些请求可能会失败,或者需要跟踪错误信息。如果您不采取正确的方法,管理 HTTP 请求可能会让代码变得更加混乱。本文将介绍 Angular 中如何管理 HTTP 请求,并引导您使用 Angular 提供的 HTTPInterceptors 和 RxJS 一起管理 HTTP 请求。

发送 HTTP 请求

要发送 HTTP 请求,首先需要在 Angular 中引入 HttpClientModule。HttpClientModule 是在 Angular 4.3+ 版本中引入的,它提供了 Angular 中的 HTTP 请求客户端。要使用 HttpClientModule,请在应用程序的 AppModule 模块中进行引入:

-- -------------------- ---- -------
------ - ---------------- - ---- -----------------------

-----------
  -------- - ---------------- --
  ---
--
------ ----- --------- -
  ---
-

引入 HttpClientModule 模块后,可以在服务中进行 HTTP 请求:

-- -------------------- ---- -------
------ - ---------- - ---- ----------------
------ - ---------- - ---- -----------------------

-------------
  ----------- ------
--
------ ----- -------------- -
  ------------------- ----- ----------- --

  ---------------- -
    ------ ------------------------------------------------------------
  -

  ----------------- -
    ----- ---- - - ------ ------ ----- ------ ------- - --
    ------ ------------------------------------------------------------ ------
  -
-

在代码示例中,我们通过 HttpClient 的 get 方法来获取返回值,并使用 post 方法发送数据。这里我们使用 jsonplaceholder.typicode.com 来模拟 HTTP 请求。

处理错误

在发送 HTTP 请求时,通常需要处理请求错误。在 Angular 中,我们可以使用 ErrorInterceptor 来拦截错误并对其进行统一处理。在示例代码中,我们为每个 HTTP 请求设置了一个错误处理方法:

-- -------------------- ---- -------
------ - ---------- - ---- ----------------
------ - ---------- ------------ ---------------- ------------ ------------- ----------------- - ---- -----------------------
------ - ----------- ---------- - ---- -------
------ - ---- ---------- - ---- -----------------

-------------
------ ----- ---------------- ---------- --------------- -

  ------------- --

  ------------------ ----------------- ----- ------------- -------------------------- -
    ------ --------------------------
      ------------------ ------------------ -- -
        -- ------------- --- ---- -
          -- ---
        - ---- -- ------------- --- ---- -
          -- ------
        - ---- -- ------------- --- ---- -
          -- --------
        - ---- -
          -- ----
          -- ---- ------------- ------
        -
        ------ ------------------
      --
    --
  -
-

在这个拦截器中,我们使用了 catchError 操作符来捕获错误,并将其返回一个 RxJS 可观察对象。我们可以为 HTTP 错误定义自己的行为,例如:显示错误消息、显示错误页面等。

显示加载状态

在 UI 中显示加载状态是一项常见的需求。Angular 中,我们可以使用 LoadingInterceptor 拦截器来管理每个 HTTP 请求的加载状态。例如:

-- -------------------- ---- -------
------ - ---------- - ---- ----------------
------ - ---------- ------------ ---------------- ------------ ------------- ----------------- - ---- -----------------------
------ - ---------- - ---- -------
------ - -------- - ---- -----------------

-------------
------ ----- ------------------ ---------- --------------- -

  ------- --------- ------------------ - ---

  ------------- --

  ------------------ ----------------- ----- ------------- -------------------------- -
    ----------------------------
    ------ --------------------------
      ----------- -- -
        ----- ----- - -------------------------------
        -- ------ --- --- -
          --------------------------- ---
        -
      --
    --
  -

  ------------ ------- -
    ------ -------------------- - --
  -
-

在这个拦截器中,我们使用了 finalize 操作符。finalize 它会在 observable 完成的时候执行,即在本例中,当 HTTP 请求被处理并且响应已接收时。我们利用 requests 数组来跟踪应用程序中的所有请求。在 isLoading 方法中,我们只需检查是否有等待的请求即可。

总结

在这篇文章中,我们学习了管理 Angular 中的 HTTP 请求可以使用 HTTPInterceptors 和 RxJS。这些技术可帮助我们更好地处理 HTTP 请求的错误、显示加载状态,并使代码更加整洁且易于维护。在您的应用中使用上述技术,可以让您更好地处理网络请求并向用户提供最佳的用户体验。

示例代码

示例代码可以在以下链接中找到:Angular HTTPInterceptors 示例

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/649b7f4948841e98948462bb

纠错
反馈