Angular 教程:使用路由保护路由

阅读时长 5 分钟读完

Angular 是一种流行的前端开发框架,它提供了许多功能来创建动态网站和应用程序。一些应用程序可能需要保护访问某些页面或功能的路由。在本文中,我们将学习如何在 Angular 中使用路由守卫来保护路由。

什么是路由守卫?

路由守卫是 Angular 的一种功能,用于在用户导航到某个路由或离开该路由时执行特定任务。它可以用于验证用户的身份、检查页面权限或加载一些数据,以便在用户进入或离开页面时进行处理。路由守卫都是服务,并且必须注入到模块或组件中。

Angular 中有四种可用的路由守卫,它们分别是:

  • CanActivate :用于检查用户是否有权限导航到一个路由。
  • CanActivateChild :用于控制该路由下子路由的访问权限。
  • CanDeactivate :用于控制用户离开该路由的权限。
  • Resolve :用于在路由被激活前预先加载一些数据。

在这篇文章中,我们将主要关注 CanActivate 守卫。

如何使用 CanActivate 守卫?

首先,我们需要在应用程序中创建一个路由器。可以通过使用 Angular CLI 命令 ng generate module app-routing --flat --module=app 来创建 app-routing.module.ts 文件并添加路由。下面是一个简单的示例:

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

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

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

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

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

在上述代码中,我们创建了三个组件:HomeComponentLoginComponentProfileComponent。我们还导入了一个名为 AuthGuardCanActivate 守卫。

接下来,我们需要创建 auth.guard.ts 文件,它将实现 CanActivate 守卫。在 auth.guard.ts 中,我们应该验证用户是否有权限访问该路由。如果用户有权限,则返回 true,否则返回 false 并导航到某个其他页面。

示例代码如下所示:

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

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

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

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

-

在上述代码中,我们注入了 AuthServiceRouter 服务,并实现了 CanActivate 接口的 canActivate 方法。在 canActivate 方法中,我们检查用户是否已经登录并返回布尔值作为结果。如果用户没有登录,则使用 Router 服务导航到登录页面。

最后,在应用程序中,我们需要确保所有受保护的路由都包含 canActivate 属性,这将告诉应用程序当用户访问该路由时要执行哪个守卫。

总结

在本文中,我们学习了如何使用 CanActivate 守卫来保护路由。通过创建路由守卫并将其注入到模块或组件中,我们可以轻松地控制用户访问应用程序中的某些页面或功能。

示例代码:https://stackblitz.com/edit/angular-route-guard-example

参考资料

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

纠错
反馈