Запустить оператор switchmap при вызове следующего - Angular 7 - PullRequest
0 голосов
/ 11 января 2019

Я использую тему и асинхронный канал , чтобы сделать http-запрос и поиск на основе поискового запроса. Для этого я использовал угловой учебник, в котором используется оператор switchmap и некоторое время задержки для метода keyup .

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

Но при вызове next оператор switchmap не запускается!

Ввод поиска:

<input type="text" placeholder="Search name" [(ngModel)]="searchTerm" (keyup)="callSearch()">

машинописный код:

 products$: Observable<ProdSearch[]>;
 searchProducts$ = new Subject<string>();
 callSearch() {
   if (this.searchTerm.length > 0 ){
    this.searchProducts$.next(this.searchTerm);
   }
 }

Подписка:

this.products$ = this.searchProducts$.pipe(
  debounceTime(1000),
  distinctUntilChanged(),
  switchMap(term => {
    const options: PagingOptions = {};
    options.limit = "5";
    if (term.length !== 0) {
      options.filterOptions = "name_search_" + this.searchTerm;
    }

    return this.service.getCollection<ProdSearch>(this.baseUrl + 'products/search', options)
      .pipe(map(collection => collection.records))
  })

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

showLastProducts() {
this.showChangeList = true;
this.searchProducts$.next(''); // The switchmap won't work
}

1 Ответ

0 голосов
/ 11 января 2019

Попробуйте переключиться:

searchProducts$ = new Subject<string>();

К этому:

searchProducts$ = new BehaviorSubject<string>('');

Это передаст значение, прежде чем вы что-либо наберете.

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