1.替换为CanActivateChild
当你使用CanActivate保护你的路由时,官方建议使用CanActivateChild代替它。CanActivateChild可以用来保护子路由,原有的CanActivate仍然可以使用。示例代码如下:
原有代码:
@Injectable()
export class MyGuardService implements CanActivate {
canActivate(): boolean {
return true;
}
}
重构代码:
@Injectable()
export class MyNewGuardService implements CanActivateChild {
canActivateChild(): boolean {
return true;
}
}
2.使用CanActivate子接口
在使用守卫(Guard)并保证路由进入之前受到保护的情况下,可以考虑使用CanActivate子接口。示例代码如下:
原有代码:
@Injectable()
export class MyGuardService implements CanActivate {
canActivate(): boolean {
return true;
}
}
重构代码:
@Injectable()
export class MyNewGuardService implements CanActivate {
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): boolean {
return true;
}
}
需要注意的是,当我们使用CanActivate接口时,必须实现“canActivate”方法,当使用CanActivateChild时,我们必须实现“canActivateChild”方法。
以上就是解决CanActive被弃用后的两种重构方式。当然,具体使用哪一种方式取决于你的业务需求。