angular - это - observable js




Как получить последнее значение при подписке на Observable? (2)

У меня есть два компонента Angular2, которые должны обмениваться данными через службу:

@Injectable()
export class SearchService {
  private searchResultSource = new Subject<string>()
  searchResult$ = this.searchResultSource.asObservable()

  setSearchResults(_searchResult: string): void {
    this.searchResultSource.next(_searchResult)
  }
}

Предположим, что ComponentA отображается и выдает событие через SearchService.setSearchResults . Затем пользователь переходит к ComponentB , который также подписывается на searchResult$ . Однако ComponentB никогда не будет наблюдать событие, испускаемое ComponentA поскольку оно не было подписано на searchResult$ в то время, когда ComponentA searchResult$ событие, так как оно не существовало.

Как я могу создать Observable который отправляет последнее событие каждому новому подписчику?


Вы можете использовать ReplaySubject чтобы всегда получать последнее значение Observer, что-то вроде этого:

@Injectable()
export class SearchService {

  private searchResultSource = new ReplaySubject<string>(1);

  setSearchResults(_searchResult: string): void {
      this.searchResultSource.next(_searchResult);
  }
}

И просто подписывайтесь как обычно.
Более example example можно найти здесь: example


BehaviorSubject немедленно отправляет последнее значение новым подписчикам:

@Injectable()
export class SearchService {

  private searchResultSource = new BehaviorSubject<string>('');

  setSearchResults(_searchResult: string): void {
      this.searchResultSource.next(_searchResult);
  }
}

ReplaySubject все предыдущие события новым подписчикам.







observable