【发布时间】:2016-04-15 04:43:34
【问题描述】:
在 Angular 2 中,您可以为组件指定 @CanActivate 注释,您可以在其中确定该组件是否应该被激活。它不是接口的原因是因为在组件实例化之前调用了回调。问题是,我想不出一种方法将依赖项注入到该回调中。而且我需要我的服务来告诉我是否已登录(以及以谁登录)来确定是否允许路由到特定组件。
如何将依赖项注入@CanActivate 回调?我正在使用 ES5,这不起作用:
app.ListsComponent = ng.router.CanActivate([
app.SessionService,
function(session, instruction) {
console.log(session);
return true;
}
])(app.ListsComponent);
编辑:或者,我可以在组件上使用routerOnActivate 生命周期事件,并使用this.router.navigate 将用户送走(如果他们不应该在那里)。缺点是它会破坏浏览器历史记录:如果每次您到达特定 URL 时我都会异步重定向您,您就不能非常有用地使用浏览器中的后退按钮。对于这种情况,有没有办法让router.navigate 使用history.replaceState 而不是history.pushState?
【问题讨论】:
-
一旦问题Router hooks are injectable and consistent with core 得到解决,DI 应该是可能的。 Milestone 目前是 Angular 2 候选版本。