Можно ли запускать выходные события для динамически создаваемых компонентов

Что я пытаюсь сделать:

  1. Динамическое создание компонентов (сделано)
  2. Разрешить динамически создаваемым компонентам использовать «выходные данные», чтобы родительские компоненты могли прослушивать изменения от дочерних элементов.

Вот Plnkr для того, что я пытаюсь сделать. Plnker -> https://plnkr.co/edit/XpDCGIwd2at9oR74lpY5?p=preview

Когда пользователь нажимает «+ Компонент», создается следующий компонент

let componentFactory = this.componentFactoryResolver.resolveComponentFactory(ChildComponent);
let ref = this.container.createComponent(componentFactory);

В каждом добавленном дочернем компоненте, когда пользователь щелкает «Событие пожара»

<span class="initiateParentAction" 
  (click)="fireEventEmitter()" [class.eventFired]="eventFired==true">Fire Output Event: {{eventFired}}</span>

он вызывает следующее

fireEventEmitter(){
    console.log("Event Fired");
    this.parentActionReq.emit({
      action: "helloWorld"
    });
    this.eventFired = true;
    setTimeout(() => this.eventFired=false, 2000);
}

Родительский компонент (в данном случае компонент «Приложение») прослушивает эти выходные данные, как показано здесь.

<ng-container #container 
    (parentActionReq)="childActionInitiated($event)"></ng-container>

Мне не удалось получить события из динамически созданных компонентов для регистрации в родительском элементе. В Plnker «Полученное дочернее событие вывода» должно стать истинным.

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

Любые предложения, подсказки, рекомендации будут оценены здесь.

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

Спасибо любезно.


person Edward    schedule 05.10.2016    source источник
comment
Не могли бы вы обновить плункер, как у вас это работает   -  person Sunil Garg    schedule 08.08.2017


Ответы (1)


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

ref.instance.someProp = 'someVal';
ref.instance.someOutput.subscribe(val => this.prop = val);

См. также Динамические вкладки Angular 2 с щелчком пользователя выбранные компоненты

person Günter Zöchbauer    schedule 05.10.2016
comment
Спасибо вам за быстрый ответ. Я рассмотрю предложенный альтернативный подход. - person Edward; 05.10.2016
comment
@Эдвард Гюнтер очень быстрый) +1 - person yurzui; 05.10.2016
comment
А у @yurzui обычно очень качественные ответы :) - person Günter Zöchbauer; 05.10.2016