2

Есть ли способ испустить событие в угловом2, которое можно прослушать во всем приложении? Как и в AngularJS с использованием $rootScope.broadcast и emit. Можно ли достичь этого же в угловом2? Я читал о @Output() и EventEmitter() и реализовал его, но он ограничивает только родителя прослушиванием события, опущенного дочерним.Испускать и транслировать события во всем приложении в Angular

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

+3

Использование наблюдаемых, по-видимому, является хорошим вариантом: http://stackoverflow.com/questions/34376854/delegation-eventemitter-or-observable-in-angular2/35568924#35568924 – j3r6me

+0

Вы можете добавить наблюдателя к своему родителю, когда ребенок издает. Затем вы можете подписаться на наблюдаемое в любом месте. –

ответ

2

В Angular2 нет глобального охвата. Есть только компоненты и услуги.

С помощью услуг вы можете определить их область действия по месту их предоставления. Если вы укажете один из них в @NgModule({providers: ...}) (или в импортированном модуле), он станет глобально доступным. Если вы предоставите его компоненту, он доступен только для этого компонента и его дочерних элементов.

Для примеров, как использовать общие службы см https://github.com/dart-lang/sdk/issues/27637

Вы можете также послать событие восходящей цепочки DOM, как показано в in Angular2 how to know when ANY form input field lost focus

События, испускаемых с @Output() someOutput:EventEmitter = new EventEmitter(); не пузырь.

+2

'BehaviorSubject' - это простой способ. К сожалению, реакционеры считают, что «Субъект» следует избегать. http://davesexton.com/blog/post/To-Use-Subject-Or-Not-To-Use-Subject.aspx, http://stackoverflow.com/questions/14396449/why-are-subjects-not- Рекомендуемые-в-сет-реактивные расширения Так что это упрямый вопрос. Если вы новичок в rxjs, я бы посоветовал вам использовать его, пока вам не станет более комфортно реагировать на программирование, и вы сами сможете решить. –

+1

Спасибо, Гюнтер! Я сделаю это. Просто хотел подтвердить мои знания. Лучше ли это сделать услуги? –

+0

Услуги ** ** способ сделать это в Angular2. –

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