Angular 是一种流行的前端开发框架,它提供了许多功能来创建动态网站和应用程序。一些应用程序可能需要保护访问某些页面或功能的路由。在本文中,我们将学习如何在 Angular 中使用路由守卫来保护路由。
什么是路由守卫?
路由守卫是 Angular 的一种功能,用于在用户导航到某个路由或离开该路由时执行特定任务。它可以用于验证用户的身份、检查页面权限或加载一些数据,以便在用户进入或离开页面时进行处理。路由守卫都是服务,并且必须注入到模块或组件中。
Angular 中有四种可用的路由守卫,它们分别是:
CanActivate
:用于检查用户是否有权限导航到一个路由。CanActivateChild
:用于控制该路由下子路由的访问权限。CanDeactivate
:用于控制用户离开该路由的权限。Resolve
:用于在路由被激活前预先加载一些数据。
在这篇文章中,我们将主要关注 CanActivate
守卫。
如何使用 CanActivate 守卫?
首先,我们需要在应用程序中创建一个路由器。可以通过使用 Angular CLI 命令 ng generate module app-routing --flat --module=app
来创建 app-routing.module.ts
文件并添加路由。下面是一个简单的示例:
-- -------------------- ---- ------- ------ - -------- - ---- ---------------- ------ - ------- ------------ - ---- ------------------ ------ - ------------- - ---- ------------------------ ------ - -------------- - ---- -------------------------- ------ - ---------------- - ---- ------------------------------ ------ - --------- - ---- --------------- ----- ------- ------ - - - ----- --- ---------- ------------- -- - ----- -------- ---------- -------------- -- - ----- ---------- ---------- ----------------- ------------ ----------- -- -- ----------- -------- ------------------------------- -------- -------------- -- ------ ----- ---------------- - -
在上述代码中,我们创建了三个组件:HomeComponent
、LoginComponent
和 ProfileComponent
。我们还导入了一个名为 AuthGuard
的 CanActivate
守卫。
接下来,我们需要创建 auth.guard.ts
文件,它将实现 CanActivate
守卫。在 auth.guard.ts
中,我们应该验证用户是否有权限访问该路由。如果用户有权限,则返回 true
,否则返回 false
并导航到某个其他页面。
示例代码如下所示:
-- -------------------- ---- ------- ------ - ---------- - ---- ---------------- ------ - ------------ ----------------------- -------------------- -------- ------ - ---- ------------------ ------ - ---------- - ---- ------- ------ - ----------- - ---- ----------------- ------------- ----------- ------ -- ------ ----- --------- ---------- ----------- - ------------------- ------------ ------------ ------- ------- ------- -- ------------ ----- ----------------------- ------ --------------------- ------------------ - -------- - --------------- - -------- - ------- - ------- - -- ------------------------------- - ------ ----- - --------------------------------- ------ ------ - -
在上述代码中,我们注入了 AuthService
和 Router
服务,并实现了 CanActivate
接口的 canActivate
方法。在 canActivate
方法中,我们检查用户是否已经登录并返回布尔值作为结果。如果用户没有登录,则使用 Router
服务导航到登录页面。
最后,在应用程序中,我们需要确保所有受保护的路由都包含 canActivate
属性,这将告诉应用程序当用户访问该路由时要执行哪个守卫。
总结
在本文中,我们学习了如何使用 CanActivate
守卫来保护路由。通过创建路由守卫并将其注入到模块或组件中,我们可以轻松地控制用户访问应用程序中的某些页面或功能。
示例代码:https://stackblitz.com/edit/angular-route-guard-example
参考资料
- https://angular.io/api/router/CanActivate
- https://angular.io/guide/router-tutorial-toh#milestone-5-route-guards
- https://dev.to/clintdev/simple-way-to-implement-angular-route-guards-5ap6
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645a221d968c7c53b0c439dc