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.

186
demandé sur Lynx 242 2015-12-27 00:48:29

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.

255
répondu toskv 2017-12-18 20:59:05

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())
...
133
répondu Radouane ROUFID 2017-09-08 08:11:19

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!

38
répondu Rahmathullah M 2018-02-08 08:35:36

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
8
répondu ethemsulan 2017-10-27 07:37:39

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
      });
    });
});
5
répondu mjwrazor 2017-01-24 18:13:41

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);
})
3
répondu Stefan Mitic 2018-07-22 19:18:26
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

0
répondu Toolkit 2017-02-08 13:09:38
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);
0
répondu vbrgr 2018-09-07 13:50:43

Vous pouvez utiliser Paramètres Url de la documentation officielle.

Exemple: this.httpClient.get(this.API, { params: new HttpParams().set('noCover', noCover) })

0
répondu Muhammed Ozdogan 2018-09-08 18:07:59