Передать массив в params при запросе get

Рейтинг: 0Ответов: 1Опубликовано: 29.03.2023

Не могу разобраться, в чем проблема.

fetchData:

this.service.get(this.tabIndex, dateStart, dateEnd, this.brandsId).subscribe(data => {
  code
});

service:

public get(
 status: number,
 page?: number, 
 per_page?: number, 
 stage?: string, 
 from_date?: string,
 to_date?: string,
 brands_ids?: any,
 ): Observable<any> {
 let params = new HttpParams()
 .set('page', (page + 1).toString())
 .set('per_page', per_page.toString())

if(from_date){
  params = params.set('from_date', from_date);
}

if(to_date){
  params = params.set('to_date', to_date);
}

if(brands_ids) {
  params = params.set('brands_ids', brands_ids);
}

  return this.http
  .get<any>(`apiUrl`, {params})
  .pipe(catchError(error => throwError((error?.error?.errors) || error)));

}

в fetchData приходит массив с id. При запросе, в параметрах на странице, вижу, что уходит brands_id: 1, 2, 3; То есть, просто числа через запятую, в чем причина? (Либо каким способом можно передать массив)

Ответы

▲ 0

Проблема заключается в том, что массив brandsId в fetchData передается как один аргумент в метод this.service.get(), который ожидает семь аргументов. В результате, brandsId игнорируется, и в параметрах запроса уходят только первые четыре параметра.

Чтобы передать массив в качестве аргумента, можно воспользоваться оператором расширения ..., который преобразует массив в список аргументов. Для этого, нужно изменить вызов метода this.service.get() в функции fetchData следующим образом:

this.service.get(this.tabIndex, dateStart, dateEnd, ...this.brandsId).subscribe(data => { code });

В этом случае, каждый элемент массива brandsId будет передан как отдельный аргумент в метод this.service.get(), и запрос будет сформирован правильно. В параметрах запроса будут присутствовать все семь переданных аргументов, включая brands_ids.