angular路由守卫

780 阅读1分钟

angular支持多种路由守卫,可以实现在路由跳转过程中的一些处理。

路由守卫会返回一个值,用来控制接下来的行为:

  • 如果它返回 true,导航过程会继续

  • 如果它返回 false,导航过程就会终止,且用户留在原地。

  • 如果它返回 UrlTree,则取消当前的导航,并且开始导航到返回的这个 UrlTree.

 路由器可以支持多种守卫接口:

  • CanActivate来处理导航到某路由的情况。
  • CanActivateChild来处理导航到某子路由的情况。
  • CanDeactivate来处理从当前路由离开的情况.
  • Resolve在路由激活之前获取路由数据。
  • CanLoad来处理异步导航到某特性模块的情况。

在每个层级的路由上都可以设置多个路由守卫。路由器会先从最深的子路由由下往上的顺序检查 CanDeactivate()CanActivateChild() 守卫。 然后它会按照从上到下的顺序检查 CanActivate() 守卫。 如果特性模块是异步加载的,在加载它之前还会检查 CanLoad() 守卫。 如果任何一个守卫返回 false,其它尚未完成的守卫会被取消,这样整个导航就被取消了。

注意路由守卫的执行顺序很重要。在路由层级上面使用多个路由守卫时,必须要注意执行顺序,避免因为执行顺序原因导致路由行为不符合预期行为