Comment passer des arguments url (chaîne de requête)à une requête HTTP Sur Angular?
Salut Les gars, je crée une requête HTTP Sur Angular, mais je ne sais pas comment ajouter des arguments url (chaîne de requête).
this.http.get(StaticSettings.BASE_URL).subscribe(
(response) => this.onGetForecastResult(response.json()),
(error) => this.onGetForecastError(error.json()),
() => this.onGetForecastComplete()
);
Maintenant mes paramètres statiques.BASE_URL est quelque chose comme une url sans chaîne de requête comme: http://atsomeplace.com / mais je veux que ce soit http://atsomeplace.com/?var1=val1&var2=val2
Où var1 et var2 correspondent à mon objet de requête Http? Je veux les ajouter comme un objet.
{
query: {
var1: val1,
var2: val2
}
}
Et puis juste le module Http fait le travail pour analysez-le en chaîne de requête URL.
9 réponses
Le HttpClient méthodes vous permettent de définir le params dans les options.
Vous pouvez le configurer en HttpClientModule du paquet @ angular / common / http.
import {HttpClientModule} from '@angular/common/http';
@NgModule({
imports: [ BrowserModule, HttpClientModule ],
declarations: [ App ],
bootstrap: [ App ]
})
export class AppModule {}
Après cela, vous pouvez injecter le HttpClient et l'utiliser pour faire la requête.
import {HttpClient} from '@angular/common/http'
@Component({
selector: 'my-app',
template: `
<div>
<h2>Hello {{name}}</h2>
</div>
`,
})
export class App {
name:string;
constructor(private httpClient: HttpClient) {
this.httpClient.get('/url', {
params: {
appid: 'id1234',
cnt: '5'
},
observe: 'response'
})
.toPromise()
.then(response => {
console.log(response);
})
.catch(console.log);
}
}
, Vous pouvez trouver un exemple de travail ici.
Pour les versions angulaires antérieures à la version 4, Vous pouvez faire de même en utilisant Http service.
Le Http.la méthode get prend un objet qui implémente RequestOptionsArgs comme second paramètre.
Le Champ search de cet objet peut être utilisé pour définir une chaîne ou un objet URLSearchParams .
Un exemple:
// 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()
);
La documentation de la classe Http contient plus de détails. Il peut être trouvé ici et un exemple de travail ici.
Modifier Angulaire > = 4.3.x
HttpClient a été introduite avec HttpParams. Ci-dessous un exemple d'utilisation :
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(...);
(anciennes réponses)
Modifier Angulaire > = 4.x
requestOptions.search
a été désapprouvée. Utilisez requestOptions.params
à la place:
let requestOptions = new RequestOptions();
requestOptions.params = params;
Réponse originale (angulaire 2)
, Vous devez importer URLSearchParams
comme ci-dessous
import { Http, RequestOptions, URLSearchParams } from '@angular/http';
Puis construisez vos paramètres et effectuez la requête http comme suit:
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())
...
Version 5 +
Avec Angular 5 et plus, vous N'avez pas besoin D'utiliser HttpParams . Vous pouvez envoyer directement votre objet json comme indiqué ci-dessous.
let data = {limit: "2"};
this.httpClient.get<any>(apiUrl, {params: data});
Veuillez noter que les valeurs de données doivent être des chaînes, c'est-à-dire; { params: {limit: "2"}}
La Version 4.3.x +
Utiliser HttpParams, HttpClient à partir de @angulaire/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});
Pourrait aider certains!
Mon exemple
private options = new RequestOptions({headers: new Headers({'Content-Type': 'application/json'})});
Ma méthode
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');
}
Dans mon composant
userList: User[] = [];
this.userService.getUserByName(this.userName).subscribe(users => {
this.userList = users;
});
Par facteur
http://localhost:8080/test/user/?name=Ethem
Si vous prévoyez d'envoyer plus d'un paramètre.
Composant
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;
});
}
Service
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();
Et continuez avec votre requête http comme l'a fait @ethemsulan.
Route Côté Serveur
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
});
});
});
Angulaire 6
Vous pouvez transmettre les paramètres nécessaires à l'appel get en utilisant params:
this.httpClient.get<any>(url, { params: x });
Où x = { propriété: "123" }.
Quant à la fonction api qui enregistre "123":
router.get('/example', (req, res) => {
console.log(req.query.property);
})
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);
}
À Condition que vous ayez installé jQuery, I do npm i jquery --save
et inclure dans apps.scripts
dans angular-cli.json
import { Http, Response } from '@angular/http';
constructor(private _http: Http, private router: Router) {
}
return this._http.get('http://url/login/' + email + '/' + password)
.map((res: Response) => {
return res.json();
}).catch(this._handleError);
Vous pouvez utiliser Paramètres Url de la documentation officielle.
Exemple: this.httpClient.get(this.API, { params: new HttpParams().set('noCover', noCover) })