this.http.get(StaticSettings.BASE_URL).subscribe(
(response) => this.onGetForecastResult(response.json()),
(error) => this.onGetForecastError(error.json()),
() => this.onGetForecastComplete()
);
Теперь мой StaticSettings.BASE_URL - это что-то вроде url без строки запроса, например: http://atsomeplace.com/, но я хочу, чтобы это было http://atsomeplace.com/?var1=val1&var2=val2
Где var1 и var2 подходят для моего объекта запроса Http? Я хочу добавить их как объект.
{
query: {
var1: val1,
var2: val2
}
}
а затем только модуль Http выполняет задание, чтобы проанализировать его в строке запроса URL.
Метод Http.get принимает объект, который реализует RequestOptionsArgs в качестве второго параметра.
Поле поиск этого объекта может использоваться для установки строки или объекта URLSearchParams.
Пример:
// Parameters obj-
let params: URLSearchParams = new URLSearchParams();
params.set('appid', StaticSettings.API_KEY);
params.set('cnt', days.toString());
//Http request-
return this.http.get(StaticSettings.BASE_URL, {
search: params
}).subscribe(
(response) => this.onGetForecastResult(response.json()),
(error) => this.onGetForecastError(error.json()),
() => this.onGetForecastComplete()
);
В документации для класса Http содержится более подробная информация. Здесь можно найти .
HttpClient был добавлен вместе с HttpParams, Ниже приведен пример использования:
import { HttpParams, HttpClient } from '@angular/common/http';
constructor(private http: HttpClient) { }
let params = new HttpParams();
params = params.append('var1', val1);
params = params.append('var2', val2);
this.http.get(StaticSettings.BASE_URL, {params: params}).subscribe(...);
(старые ответы)
requestOptions.search
устарел. Вместо этого используйте requestOptions.params
:
let requestOptions = new RequestOptions();
requestOptions.params = params;
Вам нужно импортировать URLSearchParams
, как показано ниже
import { Http, RequestOptions, URLSearchParams } from '@angular/http';
И затем создайте свои параметры и сделайте http-запрос следующим:
let params: URLSearchParams = new URLSearchParams();
params.set('var1', val1);
params.set('var2', val2);
let requestOptions = new RequestOptions();
requestOptions.search = params;
this.http.get(StaticSettings.BASE_URL, requestOptions)
.toPromise()
.then(response => response.json())
...
RequestOptions
. Я обновил свой ответ.
Используйте HttpParams, HttpClient из @angular/common/http
import { HttpParams, HttpClient } from '@angular/common/http';
...
constructor(private httpClient: HttpClient) { ... }
...
let params = new HttpParams();
params = params.append("page", 1);
....
this.httpClient.get<any>(apiUrl, {params: params});
Помогите некоторым!
JSON.stringify()
Мой пример
private options = new RequestOptions({headers: new Headers({'Content-Type': 'application/json'})});
Мой метод
getUserByName(name: string): Observable<MyObject[]> {
//set request params
let params: URLSearchParams = new URLSearchParams();
params.set("name", name);
//params.set("surname", surname); for more params
this.options.search = params;
let url = "http://localhost:8080/test/user/";
console.log("url: ", url);
return this.http.get(url, this.options)
.map((resp: Response) => resp.json() as MyObject[])
.catch(this.handleError);
}
private handleError(err) {
console.log(err);
return Observable.throw(err || 'Server error');
}
в моем компоненте
userList: User[] = [];
this.userService.getUserByName(this.userName).subscribe(users => {
this.userList = users;
});
Постманом
http://localhost:8080/test/user/?name=Ethem
Если вы планируете отправлять более одного параметра.
private options = {
sort: '-id',
select: null,
limit: 1000,
skip: 0,
from: null,
to: null
};
constructor(private service: Service) { }
ngOnInit() {
this.service.getAllItems(this.options)
.subscribe((item: Item[]) => {
this.item = item;
});
}
private options = new RequestOptions({headers: new Headers({'Content-Type': 'application/json'})});
constructor(private http: Http) { }
getAllItems(query: any) {
let params: URLSearchParams = new URLSearchParams();
for(let key in query){
params.set(key.toString(), query[key]);
}
this.options.search = params;
this.header = this.headers();
И продолжайте свой HTTP-запрос, как это сделал @ethemsulan.
router.get('/api/items', (req, res) => {
let q = {};
let skip = req.query.skip;
let limit = req.query.limit;
let sort = req.query.sort;
q.from = req.query.from;
q.to = req.query.to;
Items.find(q)
.skip(skip)
.limit(limit)
.sort(sort)
.exec((err, items) => {
if(err) {
return res.status(500).json({
title: "An error occurred",
error: err
});
}
res.status(200).json({
message: "Success",
obj: items
});
});
});
import ...
declare var $:any;
...
getSomeEndPoint(params:any): Observable<any[]> {
var qStr = $.param(params); //<---YOUR GUY
return this._http.get(this._adUrl+"?"+qStr)
.map((response: Response) => <any[]> response.json())
.catch(this.handleError);
}
при условии, что у вас установлен jQuery, я делаю npm i jquery --save
и включаю в apps.scripts
в angular-cli.json