В Typeahead невозможно подписаться на сервис, чтобы получить данные для привязки к поиску typeahead - PullRequest
0 голосов
/ 18 февраля 2019

Я использую ngbootstrap typeahead (https://ng -bootstrap.github.io / # / components / typeahead / examples # http )

, как в приведенном примере нам нужно вернутьнаблюдаемый до [ngbTypeahead]="search"

мы ожидаем ниже результата от API

{ "data": { "groupNames": [ "group level one", "group level two", "group level one", "group level two" ] } }

от этого возвращаемого результата, который мы должны отфильтровать, содержащий слово.

search = (text$: Observable<string>) => text$.pipe( debounceTime(300), distinctUntilChanged(), map((term) => term.length < 1 ? [] : this.productService.getGroups().subscribe((response) => { if (response && response.data) { return response.data.groupNames.filter((response) => response.toLowerCase().indexOf(term.toLowerCase()) > -1); } }, ), ), )

Вопрос:

как мне вернуть нижеприведенный результат как наблюдаемое для свойства typahead

return response.data.groupNames.filter((response) => response.toLowerCase().indexOf(term.toLowerCase()) > -1);

(примечание - мыповторное извлечение целых данных из сервиса и из результата мы выполняем фильтрацию результатов по типу пользователя)

1 Ответ

0 голосов
/ 18 февраля 2019

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

search = (text$: Observable<string>) =>
    text$.pipe(
      debounceTime(300),
      distinctUntilChanged(),
      switchMap((term) => term.length < 1 ? of([]) :
        this.productService.getGroups().pipe(
          filter((response) => response && response.data)
          map((response) => response.data.groupNames.filter((response) => response.toLowerCase().indexOf(term.toLowerCase()) > -1))
        )
      ),
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...