为啥路由保护 canLoad 不会触发,但 canActivate 会
Posted
技术标签:
【中文标题】为啥路由保护 canLoad 不会触发,但 canActivate 会【英文标题】:Why does route guard canLoad not fire, but canActivate does为什么路由保护 canLoad 不会触发,但 canActivate 会 【发布时间】:2017-02-21 23:53:57 【问题描述】:我有一个 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 中,如下所示:
providers: [
AuthGuard,
provide: LocationStrategy, useClass: HashLocationStrategy
... other providers
]
导航正常工作,每当我尝试导航到 shiftmanage 路径时,都会触发 canActivate 路由保护。
问题: canLoad 路由守卫永远不会被击中。
问题:
这个 canLoad 守卫没有因为 HashLocationStrategy 被击中,还是我做错了什么?
【问题讨论】:
【参考方案1】:canLoad
用于加载lazy-loaded modules和loadChildren
path: 'child',
canLoad: [AuthGuard],
loadChildren: 'path/to/child.module'
【讨论】:
好的,在仔细阅读链接的文档之后,这是有道理的,谢谢以上是关于为啥路由保护 canLoad 不会触发,但 canActivate 会的主要内容,如果未能解决你的问题,请参考以下文章
Angular CanLoad 防护仅在第一次延迟加载时触发一次?
导航栏不会根据路由条件在 app.js 中呈现。路由更改时不会触发 Useeffect
在 vue-router 中静默更新 url 而不会触发路由