3.5路由守卫

拥有权限才进入路由

常见的路由守卫如下:

  • CanActivate:进入路由前促发,当条件不满足时,无法进入该路由

  • CanDeactivate:从当前路由离开时促发,当条件不满足时,无法离开路由

  • Resolve:在路由激活之前获取路由数据

CanActivate CanActivate的值为一个数组,数组中可以添加多个路由守卫,只有当所有的路由守卫都通过时,才可以进入路由。

CanDeactivate CanActivate的值为一个数组,数组中可以添加多个路由守卫,只有当所有的路由守卫都通过时,才可以促发导航。

Resolve Resolve会在进入路由前促发,负责加载信息,当信息加载后再进入路由。如果加载不到想要的信息时,可以根据要求进行处理,如发出提示,或跳转其他路由。Resolve传递的值是一个对象,对象的属性为需要传递的参数,属性值为自定义的Resolve路由守卫。

自定义CanActivate路由守卫login.guard.ts

1.新建继承CanActivate接口的LoginGuard类,实现canActivate()方法。 2.在canActivate()方法中编写逻辑,当canActivate()方法返回为true时,允许进入路由,反之,当canActivate()方法返回为false时,不允许进入路由。

export class LoginGuard implements CanActivate {

  canActivate(): boolean {
    if (Math.random() > 0.5) {
      console.log('用户已成功,正在导航');
      return true;
    } else {
      console.log('用户未登录');
      return false;
    }
  }

}

自定义CanDeactivate路由守卫unsave.guard.ts

1.新建继承CanDeactivate接口的UnSaveGuard类,实现canDeactivate()方法。CanDeactivate接口中需要指定一个泛型,该泛型为路由守卫保护的路由组件类型。 2.在canDeactivate()方法中编写逻辑,当canDeactivate()方法返回为true时,允许离开路由,反之,当canDeactivate()方法返回为false时,不允许离开路由。

自定义Resolve路由守卫product.resolve.ts

1.新建继承Resolve接口的ProductResolve类,实现resolve()方法。Resolve接口中需要指定一个泛型,该泛型为路由守卫保护的路由组件类型。 2.在resolve()方法中编写逻辑,加载数据返回或跳转等其他操作。

使用路由守卫

1.在路由模块中为路由守卫提供注册器

2.在对应的路由上使用路由守卫

使用Resolve路由守卫

1.在路由模块中为路由守卫提供注册器

2.在对应的路由上使用路由守卫

3.接受resolve路由守卫中传递的值

Last updated

Was this helpful?