2017-10-11 236 views
0

我有一個主要路由有兒童路由和這些孩子是懶惰加載模塊,並在每個懶惰加載模塊,我也有他們單獨的路由。我遇到的問題是,當我守護的主要途徑,以防止裝載的孩子將其路由調用多個時間Angular 2路由警衛CanActivateChild與延遲加載模塊路由

主路由代碼

export const PROVIDER_ROUTES: Route = { 
    path: 'provider', 
    component: ProviderComponent, 
    canActivateChild:[AuthGuard], 
    children: [ 
     { path: '', redirectTo: 'courses', pathMatch: 'full' }, 
     { path: 'courses', loadChildren: 'app/provider/course/course.module#CourseModule' }, 

    ], 

}; 

延遲加載路由代碼

const routes: Routes = [ 
    { 
    path: '', 
    component: CourseListComponent, 
    resolve: { courses: CourseListResolver }, 
    children: [ 
     { 
     path: ':id', 
     component: CoursesEditComponent, 
     resolve: { organizations: AddCourseResolver } 
     }, 
     { 
     path: ':id/edit', 
     component: CoursesEditComponent, 
     resolve: { course: CourseEditResolver } 
     }, 
     { 
     path: ':id/assign/:orgId', 
     component: CourseAssignComponent, 
     resolve: { subOrganizations: LicenseAssignResolver } 
     }, 
     { 
     path: ':id/update/:orgId', 
     component: CourseAssignComponent, 
     resolve: { license: LicenseEditResolver } 
     } 

    ] 
    }, 
]; 

@NgModule({ 
    imports: [RouterModule.forChild(routes)], 
    providers: [ 
    CourseListResolver, 
    CourseEditResolver, 
    LicenseAssignResolver, 
    LicenseEditResolver, 
    AddCourseResolver 
    ], 
    exports: [RouterModule], 
}) 
export class CourseRoutingModule { } 

export const RoutedComponents = [ 
    CourseListComponent, 
    CoursesEditComponent, 
    CourseAssignComponent 
]; 

AuthGuard代碼

export class AuthGuard implements CanActivateChild { 

    constructor(private authService: AuthService, private router: Router, private commonService:CommonService) { } 
    canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> { 
    return this.authService.isUserLoggedIn().map((result: EditUser) => { 
     console.log(result); 
     if (result != null && result.organizations.length > 0) { 
     this.commonService.isAuthenticated = true; 
     return true; 
     } 
     this.commonService.isAuthenticated = false; 
     this.router.navigate(["/provider"]) 
     return false; 
    }); 

多次調用AuthGuard函數爲什麼?

enter image description here

回答

0

你有2級激活途徑,因此它會檢查每個級別的後衛。如果你想打電話一次,只需把防護裝置移動到兒童的位置。