CanActivateChild
一个接口,某些类可以实现它以扮演一个守卫,来决定该路由的子路由能否激活。 如果所有守卫都返回 true,就会继续导航。如果任何一个守卫返回了 false,就会取消导航。 如果任何一个守卫返回了 UrlTree,就会取消当前导航,并开始导航到这个守卫所返回的 UrlTree。
Interface that a class can implement to be a guard deciding if a child route can be activated. If all guards return true, navigation will continue. If any guard returns false, navigation will be cancelled. If any guard returns a UrlTree, current navigation will be cancelled and a new navigation will be kicked off to the UrlTree returned from the guard.
      
      interface CanActivateChild {
  canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree
}
    说明
      
      - class UserToken {}
 - class Permissions {
 -   canActivate(user: UserToken, id: string): boolean {
 -     return true;
 -   }
 - }
 -  
 - @Injectable()
 - class CanActivateTeam implements CanActivateChild {
 -   constructor(private permissions: Permissions, private currentUser: UserToken) {}
 -  
 -   canActivateChild(
 -     route: ActivatedRouteSnapshot,
 -     state: RouterStateSnapshot
 -   ): Observable<boolean|UrlTree>|Promise<boolean|UrlTree>|boolean|UrlTree {
 -     return this.permissions.canActivate(this.currentUser, route.params.id);
 -   }
 - }
 -  
 - @NgModule({
 -   imports: [
 -     RouterModule.forRoot([
 -       {
 -         path: 'root',
 -         canActivateChild: [CanActivateTeam],
 -         children: [
 -           {
 -              path: 'team/:id',
 -              component: Team
 -           }
 -         ]
 -       }
 -     ])
 -   ],
 -   providers: [CanActivateTeam, UserToken, Permissions]
 - })
 - class AppModule {}
 
    你还可以转而提供一个具有 canActivateChild 签名的函数:
You can alternatively provide a function with the canActivateChild signature:
      
      - @NgModule({
 -   imports: [
 -     RouterModule.forRoot([
 -       {
 -         path: 'root',
 -         canActivateChild: ['canActivateTeam'],
 -         children: [
 -           {
 -             path: 'team/:id',
 -             component: Team
 -           }
 -         ]
 -       }
 -     ])
 -   ],
 -   providers: [
 -     {
 -       provide: 'canActivateTeam',
 -       useValue: (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => true
 -     }
 -   ]
 - })
 - class AppModule {}
 
    方法
      
      参数
 返回值
  |