Добавление к этому простому HTTP-запросу наблюдаемого метода - PullRequest
0 голосов
/ 08 мая 2020

У меня есть объекты ресторана.

У меня есть метод, который возвращает все рестораны в базе данных:

    getRestaurantAll() : Observable<Restaurant[]>
    {
      return this.http.get<Restaurant[]>(`${this.baseUrl}api/Restaurant`)
        .pipe(
          catchError(this.handleError<Restaurant[]>(`getRestaurantAll`,[]))
        );
    }

Теперь я хочу создать аналогичный метод. Но с небольшими изменениями.

Итак, есть два важных свойства массива Restaurant, с которыми я работаю:

TypesOfFood
(Pizza, Burgers, Tacos, Ramen)

MethodsOfPayment
(Credit, Debit, Cash, Vouchers)

В настоящее время выбор пользователя уже передан как строковые переменные userFoodChoice и userPaymentChoice.

Я бы хотел, чтобы пользователю был представлен список ресторанов, которые принимают ТОЛЬКО ОБА из сделанных выборов.

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

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Я не уверен в вашем запросе, но если вы хотите выполнить фильтрацию на основе выбора из двух представленных массивов, после восстановления двух значений для фильтрации (в примере filterTypesOfFood и filterMethodsOfPayment) , вы можете основывать фильтр на этих двух (по вашему выбору, с помощью ИЛИ или И).

filteredTypesOfFood = 'Pizza';
filteredMethodsOfPayment = 'Credit';

...
return this.http.get<Restaurant[]>(`${this.baseUrl}api/Restaurant`)
    .pipe(
      map((res: Restaurant[]) => {
         const filteredRestaurants = res.filter(
            (restaurant) => {
              return (restaurant.type === this.filteredTypesOfFood
                     || restaurant.method === this.filteredMethodsOfPayment);
            });
         return filteredRestaurants;
      }),
      catchError(this.handleError<Restaurant[]>(`getRestaurantAll`,[]))
    );

Вот рабочий, но упрощенный пример, только с функцией фильтра, с имитацией массива ресторанов: https://stackblitz.com/edit/angular-restaurant-filtered-array?file=src / app / app.component.ts

0 голосов
/ 08 мая 2020

Лучше делать этот элемент управления на Backend, а не на Frontend, и иметь список ресторанов, который соответствует предпочтениям пользователей, непосредственно из Backend. но если вы хотите сделать это на переднем конце. вы можете использовать карту вот так:

return this.http.get<Restaurant[]>(`${this.baseUrl}api/Restaurant`)
    .pipe(
      map((res: Restaurant[]) => {
         const filteredRestaurants = res.filter(
            (restaurant) => {
              // put your conditions here
            });
         return filteredRestaurants;
      }),
      catchError(this.handleError<Restaurant[]>(`getRestaurantAll`,[]))
    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...