Выполнить базовый компонент перед использованием компонента маршрута для аутентификации

У меня есть небольшой пример приложения, которое загружает различные компоненты на основе маршрутов в Angular 2 (с использованием TypeScript).

Далее я хотел бы попробовать способ проверки авторизации перед вызовом фактического компонента, принадлежащего маршруту.

Я мог бы, например, легко создать какой-то базовый класс и позволить всем моим классам компонентов расширяться от него. Но затем я должен убедиться, что все мои компоненты вызывают конструктор базового класса.

Но, возможно, есть более «Angular 2» способ достичь той же цели?

Я действительно не нашел много информации по этому вопросу еще. Есть ли способ запустить, скажем, класс AuthComponent перед загрузкой любого другого компонента?


person Vivendi    schedule 16.01.2016    source источник


Ответы (1)


Проверьте аннотацию @CanActivate:

https://angular.io/docs/ts/latest/api/router/CanActivate-decorator.html

вы можете предотвратить создание экземпляра компонента и перенаправить их для входа в систему.

person Langley    schedule 16.01.2016
comment
Но это не позволяет мне перенаправить пользователя на страницу входа. Насколько я могу судить, это только предотвращает загрузку компонента. - person Vivendi; 17.01.2016
comment
что мешает перенаправить? - person Langley; 17.01.2016
comment
Функция CanActivate ожидает bool в качестве возвращаемого значения. Я больше ничего не могу там делать. Также нет возможности внедрить в него класс Router, который мне также нужен для перенаправления. - person Vivendi; 17.01.2016
comment
Если вы хотите использовать объект маршрутизатора, вам нужно создать экземпляр компонента, чтобы внедрить его, вы можете сделать это, используя вместо этого OnActivate, реализуя метод routerOnActivate, но это не имеет особого смысла, зачем вам активировать компонент, если вы собираетесь перенаправить их в любом случае? возможно, вы можете сделать это, если реализуете пустой объект маршрутизации посредника, вся работа которого заключается в реализации этого метода, и его маршрут будет чем-то вроде '/...'. См. angular.io/docs/ts/latest/api/router. /OnActivate-interface.html . - person Langley; 17.01.2016