Подписаться на служебную переменную в другом компоненте? - PullRequest
0 голосов
/ 06 марта 2020

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

Это мой компонент, который я пытаюсь прослушать:

 ngOnInit() {
    this.isOpen.open.subscribe(value => {
      console.log('hello');
    })
  }

Это еще один компонент, из которого я отправляю его:

  onClick(value){
    if (value === 'open') {
      this.isOpen.isOpen(true);
    } else {
      this.isOpen.isOpen(false);
    }
  }

Это мой сервис:

  public open: Subject<boolean> = new Subject<boolean>()

constructor() { }

isOpen(value) {
    if (value === true) {
        this.open.next(true)
    } else {
        this.open.next(false)
    }
}

По некоторым причинам, которые не будут выходить из консоли, я знаю, что моя функция onClick попадает в службу, потому что я могу выйти из значения в ней, но она не хочет получать доступ к моему другому компоненту. Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 07 марта 2020

Вы должны слушать наблюдаемые, а не предметы

К вашим услугам

// create subject
private open: Subject <boolean> = new Subject<boolean>()
// create an observable from the subject
public open$: Observable <boolean> = this.open.asObservable();

В вашем компоненте

private sub: Subscription; 

ngOnInit() {
    this.sub = this.isOpen.open$
        .subscribe(value => {
            console.log('hello');
        });
}

ngOnDestroy() {
    // remove subscription from memory  otherwise you'll have memory leaks
    this.sub.unsubscribe()
}

Остальные могут остаться прежними

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