我对角度2 router guide有一些不清楚。
CanDeactivateGuard用于CrisisCenterRoutingModule,它是CrisisCenterModule的一部分,由AppRoutingModule延迟加载(loadChildren:' app / crisis-center / crisis-center.module#CrisisCenterModule')。
主要问题: 为什么要在AppRoutingModule提供程序中声明CanDeactivateGuard?为什么不去CrisisCenterRoutingModule提供商?
指南的答案是:我们还需要将Guard添加到我们的主AppRoutingModule提供程序中,以便路由器可以在导航过程中注入它。
答案 0 :(得分:0)
嗯,似乎确实CanDeactivateGuard也可以由CrisisCenterRoutingModule而不是AppRoutingModule提供。 现在的问题是为什么然后指南指出AppRoutingModule是提供CanDeactivateGuard的那个? 答案我猜是CanDeactivateGuard是一个对任何模块都有用的服务,因为延迟加载的模块有自己的根注入器,这意味着它将为任何提供它的延迟加载模块创建一个额外的CanDeactivateGuard实例。 CanDeactivateGuard没有状态,因此拥有多个实例是没用的,所以最好把它放在AppRoutingModule中。