2017-10-11 3 views
0

私は子供のルートを持つメインルートを持っていて、それらの子は遅延ロードされたモジュールであり、すべての遅延ロードされたモジュールでは、私が午前問題は、私はロードの子ルートを防止するための主要なルートを守るとき、それは角2のルーティングガードCanActivateChildをレイジーロードされたモジュールルーティング

メインルーティングコードコード

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 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' }, 

    ], 

}; 

レイジーロード複数の時間を呼び出しています

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つのレベルがあります。一度電話をかけたい場合は、ガードを子供レベルに移動してください。

関連する問題