Подписчик не назначен на Observable create

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

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();

Есть ли способ избежать этого?

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
0
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если я правильно понимаю ваш случай, я думаю, что вы ищете предмет.

Вы правы, что наблюдаемые объекты не запускаются, пока на них не будет подписана подписка. Вы можете найти много ссылок на это во всевозможных документах, например: угловые документы для наблюдаемых.

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

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

Crocsx 20.11.2018 06:34

Другие вопросы по теме