导航时,组件在 canActivate 后不一样

when navigating, the component is not the same after canActivate

我在使用 angular_router 时遇到了一些奇怪的问题。

我的 AdminComponent 有一个 canActivate 测试,它检查用户是否登录。如果没有,它会重定向到登录页面。除此之外,管理模板有一个 *ngIf="isAllowed" (在 canActivate 中设置)以防止在检查之前创建子组件。

问题是当用户在一个以管理员为父级的页面中时,被登录并尝试导航到另一个页面,该页面也是管理组件的子级。

比如当前admin组件的hashCode为123,用户已经登录,一切正常。 canActivate 有效,当 isAllowed 设置为 true 时,我们可以在控制台中看到 hashCode 123。在管理组件的模板中,它还打印了 123 hashCode。到目前为止,一切都很好。

然后我们尝试导航到另一个以管理组件为父级的页面。调用 canACtivate 并打印 hashCode 123,允许用户查看页面。
这就是问题发生的地方。 CanActivate 允许用户,因为令牌有效,但管理模板中打印的 hashCode 不同。 结果是用户可以通过 CanActivate 确定,但模板不正确,因为 isAllowed 为 false。

如果我用新 URL 刷新页面,一切正常。问题出在导航上。

您可以在图像中看到canActivate hashCode 与模板显示的hashCode 不同,它们应该是同一个对象。

Dart VM 版本:2.0.0-dev.62.0(Wed Jun 13 16:50:22 2018 +0200)"macos_x64"
angular_router 2.0.0-alpha+14
angular 5.0.0-alpha+15

AdminComponent 必须扩展或实现 CanReuse 以允许在其子项的导航之间重复使用同一实例。