В 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
для такого рода ситуаций?