Как вы прикрепляете выход EventEmitter к компоненту при маршрутизации?

У меня есть конфигурация маршрута

@RouteConfig([
    { path: '/', name: 'Start', component: Journal },
    { path: '/register', name: 'Register', component: Register },
    { path: '/login', name: 'Login', component: Login },
    { path: '/settings', name: 'Settings', component: Settings },
])

Я хотел бы прослушать события, исходящие от журнала @Output. Как я могу это сделать, когда единственная ссылка, которая у меня есть в шаблоне,

<a class="nav-item nav-link" [routerLink]="['Journal']">Journal</a>

?


person John Wheeler    schedule 08.03.2016    source источник
comment
Вы не можете. Вам придется использовать общий сервис.   -  person Eric Martinez    schedule 09.03.2016
comment
Спасибо - я все равно пошел именно в этом направлении   -  person John Wheeler    schedule 09.03.2016
comment
@EricMartinez Спасибо за ссылку. Это так расстраивает. Если у вас есть вложенная маршрутизация, то EventEmitters просто бесполезна, и все должно быть сделано с помощью сервисов! Я смотрю на интеграцию Redux по этой конкретной причине. Хотя мне нравится Angular 2, у него есть свои ограничения, и я также должен рассмотреть возможность интеграции философии, подобной Redux. В своих проектах я склонен уже делать что-то вроде Redux, вводя сервисы в корневую папку и внедряя их туда, где это необходимо.   -  person Michelangelo    schedule 07.12.2016


Ответы (1)


Я понимаю, что это уже довольно старо, но передать состояние маршруту невозможно. В основном это связано с тем, что routerLink является общим и может принимать любое количество потенциальных дочерних элементов. Таким образом, даже если бы вы могли передать состояние или обработать его события, вы бы столкнулись с ненужной сложностью.

Правильный способ управления состоянием между родительским и дочерним компонентами — это общий сервис. По сути, это сводится к следующим шагам:

  1. Напишите услугу.
  2. Предоставляйте сервис не из своего модуля, а из родительского компонента (чтобы сделать его недоступным для стороннего кода).
  3. Внедрить сервис в родительский и любые дочерние элементы, которым он может понадобиться.

Это будет одинаково хорошо работать с состоянием, переданным дочернему элементу, и с уведомлениями, полученными от дочернего элемента, и не загрязняет настройку маршрута.

person Cobus Kruger    schedule 26.07.2017