Я делаю это в коде, чтобы обрабатывать несколько представлений из нескольких компонентов.
https://stackblitz.com/edit/angular-cy8jza (проверьте консоль на наличие ошибки)
export class ViewGroup {
_onViewChanged: any;
OnViewChanged$ : Observable<any>;
_onViewAdded: any;
OnViewAdded$ : Observable<any>;
_onViewRemoved: any;
OnViewRemoved$ : Observable<any>;
viewsSet = new Set<string>();
currentView = "";
previousView = "";
constructor(){
this.OnViewChanged$ = Observable.create(obs => this._onViewChanged = obs);
this.OnViewAdded$ = Observable.create(obs => this._onViewAdded = obs);
this.OnViewRemoved$ = Observable.create(obs => this._onViewRemoved = obs);
}
}
где-то в коде я делаю
this._availableView.set(name, new ViewGroup());
а потом позвони
this._availableView.get(group)._onViewAdded.next(view);
но я не могу назвать следующего по этому поводу, это сказать undefined.
Это точно такая же процедура, как и
this.onGroupAdded$ = Observable.create(e => this._onGroupAdded = e)
но этот работает в stackblitz.
РЕДАКТИРОВАТЬ : Я обнаружил, что метод, который я передаю в create, не вызывается, пока я не подпишусь на него. Я должен сделать это, чтобы все заработало:
this.OnViewChanged$ = Observable.create((obs) => {this._onViewAdded = obs});
this.OnViewAdded$ = Observable.create((obs) => {this._onViewAdded = obs});
this.OnViewRemoved$ = Observable.create((obs) => {this._onViewAdded = obs});
this.OnViewChanged$.subscribe();
this.OnViewAdded$.subscribe();
this.OnViewRemoved$.subscribe();
Есть ли способ избежать этого?





Если я правильно понимаю ваш случай, я думаю, что вы ищете предмет.
Вы правы, что наблюдаемые объекты не запускаются, пока на них не будет подписана подписка. Вы можете найти много ссылок на это во всевозможных документах, например: угловые документы для наблюдаемых.
Поэтому вместо создания наблюдаемых с помощью метода create. Попробуйте объявить их субъектами. Посмотрите, как они используются в документации по angular, здесь для получения более подробной информации: https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service.
Я просмотрел эту документацию, но думаю, что я неправильно ее истолковал, потому что я все заново реализовал, и это работает как шарм ... Я закрыл другой пост, потому что вы решили проблему с будкой. Спасибо !