Выходы на динамических компонентах без просмотра - PullRequest
1 голос
/ 20 сентября 2019

В проекте Angular 8 я создал несколько dynmic компонентов без viewref со следующим кодом:

const componentFactory = this.componentFactoryResolver.resolveComponentFactory(HelloComponent);
const componentRef = componentFactory.create(this.injector);      
componentRef.changeDetectorRef.detectChanges();    
componentRef.instance.slideContentRendered.pipe(first()).subscribe(x => {console.log('does not work', x);});

в самом HelloComponent, я жду, когда некоторые асинхронные задачи будут завершены, и затем сгенерирует slideContentRendered, ноя не попадаю в тело метода подписки.

Здесь вы можете увидеть пример приложения https://stackblitz.com/edit/angular-krx3y6

Как я могу получить доступ к выходам?Если я пытаюсь сделать то же самое с viewref с помощью следующего кода, он работает:

const componentRef = viewContainerRef.createComponent(componentFactory);
componentRef.instance.slideContentRendered.pipe(first()).subscribe(x => {console.log('it works', x);});

1 Ответ

0 голосов
/ 20 сентября 2019

Используйте BehaviorSubject, он будет выдавать значение всякий раз, когда где-то есть слушатель.Подписка на EventEmitter срабатывает только при наличии прямого слушателя при излучении.Сделайте также следующие изменения:

slideContentRendered = new BehaviorSubject<string>('hey');

ngAfterViewInit() {
  console.log('AfterViewInitTriggered');
  this.slideContentRendered.next('teeest!')
}

trigger() {
  this.testService.renderHtmlFromPresentation().subscribe(x => console.log(x));
}

FORKED STACKBLITZ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...