Angular 中如何实现组件级路由保护

在应用程序开发过程中,路由保护是非常关键的一个问题,因为在用户登录前,我们希望阻止他们访问特定的页面或组件。在 Angular 中,组件级路由保护是一种实现这种保护的方法,本文将对此进行详细说明。

路由保护类型

在 Angular 中,路由保护一般分为下列两种类型:

  1. 路由级别保护

用于保护整个路由路径。例如,在用户没有进行身份验证的情况下无法访问某个路由。

  1. 组件级别保护

用于保护单个组件。例如,在用户未经身份验证之前无法访问某个页面上的特定元素。

在本文中我们将着重讨论组件级别路由保护。

实现方式

实现组件级别路由保护的方法非常简单,只需要在路由定义时为需要保护的组件添加一个 Guard 即可。Guard 是一个可注入服务,它实现了 CanActivate 接口。CanActivate 接口具有一个 canActivate() 方法,这个方法返回一个 boolean 类型的值,表示是否可以激活这个路由。

在 Guard 中,我们可以判断当前用户是否已经登录,如果已登录,则返回 true ,否则返回 false。Guard 会阻止用户访问我们需要保护的组件,如果 Guard 返回 false,则路由器将导航到指定的异常组件。

接下来,我们通过一个简单的例子来演示如何实现组件级别路由保护。

我们有两个组件: Login 和 Dashboard。Dashboard 是需要保护的组件,因此我们需要为它添加一个 Guard。

  1. 在 app 文件夹中新建一个 auth 文件夹,并在该文件夹中新建一个 AuthGuard.ts 文件,代码如下:
------ - ---------- - ---- ----------------
------ - ------------ ------ - ---- ------------------

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

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

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

上面的代码中,我们定义了一个 AuthGuard ,并实现了 CanActivate 接口。在 canActivate() 方法中,我们检查 sessionStorage 中是否存在 'isLoggedIn' 字符串,如果存在则表示用户已登录,可以激活路由,返回 true。否则,我们将路由导航到 Login 组件,返回 false。

  1. 在 app.module.ts 文件中导入 AuthGuard 并将其添加到 Dashboard 路由中
------ - -------- - ---- ----------------
------ - ------------- ------ - ---- ------------------
------ - -------------- - ---- --------------------------
------ - ------------------ - ---- ----------------------------------
------ - --------- - ---- --------------------

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

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

在上述代码中,我们为 Dashboard 路由添加了一个 AuthGuard 并将其分配给 canActivate 属性。

  1. 在 Dashboard 组件 HTML 中添加一个受保护的元素
---- -------------------
  ---- --------- ---- ------- ---
------

在上述代码中,我们使用 *ngIf 来判断用户是否已经登录,如果已经登录,则显示 Dashboard 组件的受保护部分内容。

  1. 在 Login 组件的控制器中添加一段代码来实现用户登录功能
------ ------- -
  -- ---- ----- ----- ----
  ------------------------------------ --------
  -------------------------------------
-

在上述代码中,我们使用 sessionStorage 来保存当前用户已经登录,并将用户重定向到 Dashboard 组件。

到这里,我们已经完成了组件级别路由保护的实现。

结论

本文中我们讨论了 Angular 中如何实现组件级别路由保护。这是一种保护特定元素或页面的方法。我们在路由定义时为需要保护的组件添加一个 Guard ,可以实现这种保护。Guard 在用户尝试访问组件时检查是否已经登录,在未登录的情况下,阻止用户访问,否则允许用户访问。这种控制可以帮助我们保护某些需要保密的组件或页面等敏感信息。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/670715b9d91dce0dc864cdfb