Передать массив в params при запросе get
Не могу разобраться, в чем проблема.
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;
То есть, просто числа через запятую, в чем причина? (Либо каким способом можно передать массив)
Ответы (1 шт):
Проблема заключается в том, что массив 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.