angular - 为什么路由守卫 canLoad 不开火,但 canActivate 开火

标签 angular typescript angular2-routing

我有一个 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 Provider 中,如下所示:

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

导航正常,每当我尝试导航到 shiftmanage 路径时,canActivate 路由守卫就会被触发。

问题 canLoad 路由守卫从未被击中。

问题:

这个 canLoad 守卫是否因为 HashLocationStrategy 而没有被击中,还是我做错了什么?

最佳答案

canLoad用于加载lazy-loaded modules使用 loadChildren

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

关于angular - 为什么路由守卫 canLoad 不开火,但 canActivate 开火,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40011143/

相关文章:

纯文本/文本的 Angular 8/httpclient 错误响应,无法解析响应

angular - 从 Angular 中的 URL 获取值

angular - 从模板调用组件函数

Angular:如何获取路由器 socket 的组件实例

Angular 2 RC4 到 RC5 迁移

javascript - event.preventDefault 和 stopPropagation 在拖/放事件中未按预期工作

angular - 如何在 Electron 中将 livereload 与 Webpack 一起使用?

html - 组件交互 2 向 Angular

Angular 延迟加载子模块空白路径重定向到 appModule

Angular 2 : Route parameter changes, 重新加载同一页面?