#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. хорошо, после прочтения связанных документов ближе, это имеет смысл, спасибо