Почему route guard canLoad не срабатывает, но canActivate срабатывает

#angular #typescript #angular2-routing

#angular #машинопись #angular2-маршрутизация

Вопрос:

У меня есть приложение angular 2.0.1 (окончательное), которое использует HashLocationStrategy для стратегии навигации по маршруту.

Я определяю один из своих маршрутов следующим образом:

     { 
    path: 'shiftmanage', component: ShiftManageComponent,
    canLoad: [AuthGuard],
    canActivate: [AuthGuard] 
    },
  

Вот класс AuthGuard:

     import { Injectable }           from '@angular/core';
    import { 
        Route, 
        Router, 
        CanLoad, 
        CanActivate,
        ActivatedRouteSnapshot, 
        RouterStateSnapshot }       from '@angular/router';

    @Injectable()
    export class AuthGuard implements CanLoad, CanActivate {
        constructor(private router: Router) {
            console.log("AuthGuard constructor")
        }

        canLoad(route: Route): boolean {
            if (route.path === "shifts") {
                return true;
            } else {
                return false;
            }        
        }

        canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
            if (route.routeConfig.path === "shiftmanage") {
                return true;
            } else {
                return false;
            }
        }
    }
  

и я добавляю этот класс защиты к поставщикам NgModule следующим образом:

 providers: [
    AuthGuard,
    { provide: LocationStrategy, useClass: HashLocationStrategy }
    ... other providers
]
  

Навигация работает, и защита маршрута canActivate срабатывает всякий раз, когда я пытаюсь перейти к пути shiftmanage.

ПРОБЛЕМА: защита маршрута canLoad никогда не срабатывает.

ВОПРОС:

Это canLoad guard не попадает из-за HashLocationStrategy или есть что-то еще, что я делаю неправильно?

Ответ №1:

canLoad используется для загрузки модулей с отложенной загрузкой с loadChildren

 {
  path: 'child',
  canLoad: [AuthGuard],
  loadChildren: 'path/to/child.module'
}
  

Комментарии:

1. хорошо, после прочтения связанных документов ближе, это имеет смысл, спасибо