2016-05-06 3 views
4

Можно использовать декоратор Output(), чтобы испустить событие из дочернего компонента, чтобы родительский компонент мог его поймать. Мне нужно поймать событие, испускаемое любым дочерним компонентом, который не обязательно является прямым потомком данного компонента.Испускать событие через вложенные компоненты в Angular2

Позвольте ComponentTwo быть компонентом, который излучает событие. Если приложение имеет следующую структуру: App -> ComponentTwo, то мы можем легко поймать событие, испущенное ComponentTwo. Но если мы рассмотрим структуру типа App -> ComponentOne -> ComponentTwo, то мы не сможем поймать эмиттер напрямую.

Это plunker, что иллюстрирует проблему.

Итак, есть способ сортировать событие распространения во всех родительских компонентах? Благодарю.

ответ

11

Для таких мероприятий не существует пузыря. Вам нужно вручную их уловить и передать родителям.

Другим подходом было бы использовать общую службу для этого дерева компонентов и использовать в ней наблюдаемый объект.

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

constructor(private service: SharedService) { 
    this.service.notifier$.subscribe(
    data => { 
     (...) 
    }); 
} 

событие будет срабатывать таким образом:

constructor(private service: SharedService) { 
} 

notify() { 
    this.service.notifier$.next('some data'); 
} 

Посмотреть эту ссылку для получения более подробной информации:

+1

Спасибо. BTW - это отсутствие барботажа из-за дизайна A2 или просто не реализовано (пока)? – nakajuice

+0

Добро пожаловать! Я думаю, что это выбор дизайна. –

Смежные вопросы