RxJs, Angular4 + - PullRequest
       7

RxJs, Angular4 +

0 голосов
/ 08 октября 2018

У меня есть объект film, и у него есть свойство genre.Я хочу получать фильмы по жанрам во время выполнения в пользовательском выпадающем списке FormControl.

Поэтому я определяю new BehaviourSubject(<int>) genre и, если он изменится во время выполнения, получим значение в методе ngOnChanges().И после этого он попадает в API.Но я хочу проверить значение жанра до этого.Например, если genre.getValue = 0 не вызывать API.

Пример кода приведен ниже.Как я могу проверить значение?

private _genre;
private selectedGenre = new BehaviorSubject(0);
@Input()
set genre(value: any) {
  this._genre = value;
  this.selectedGenre.next(this._genre);
}
films: any[];

ngOnInit() {
  this.selectedGenre.distinctUntilChanged().combineLatest(
      this.selectedGenre.distinctUntilChanged(), (_genre) => {
        return {
          genre: _genre
        }
      }
    )
    .switchMap(t => this.service.getFilmsByGenre(genre))
    .subscribe(result => {
      if (result) this.films = result;
    });
}

ngOnChanges(changes: { [propName: string]: SimpleChange }) {
  if (changes['genre']) {
    this.films = null;
    this.filmCtrl.setValue(null);
    this.selectedGenre.next(changes['genre'].currentValue || 0);
  }
}

1 Ответ

0 голосов
/ 08 октября 2018

Вы можете использовать фильтр, чтобы подписаться только на те значения, которые вам нужно вызвать API.

this.selectedGenre.distinctUntilChanged().combineLatest(
      this.selectedGenre.distinctUntilChanged(), (_genre) => {
        return {
          genre: _genre
        }
      }
    )
    .filter(genre=>genre.getValue!==0)
    .switchMap(genre => this.service.getFilmsByGenre(genre))
    .subscribe(result => {
      if (result) this.films = result;
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...