2016-05-18 6 views
8

Wie sende ich Parameter in GET-Aufruf Winkel 2 ich in der folgenden Art und Weise versucht, aber einige Fehler immer sagen,Gabe von Parametern in http GET Winkel 2

Argument of type '{ params: URLSearchParams; }' is not assignable to parameter of type 'RequestOptionsArgs'. 
    Object literal may only specify known properties, and 'params' does not exist in type 'RequestOptionsArgs'. 

Funktionsaufruf:

import {Http, Response, Headers, RequestOptions, URLSearchParams} from 'angular2/http'; 
import 'rxjs/Rx'; 

constructor(private nav: NavController, public http: Http) { 
    onLogin(value: string): void { 
     if(this.authForm.valid) { 
      this.userData.login(); 
      let params = ''; 
      let options = new RequestOptions({ 
       // Have to make a URLSearchParams with a query string 
       params: new URLSearchParams('validateUsr=false') 
      }); 
      this.http.get('https://itunes.apple.com/us/rss/topmovies/limit=1/json', options) 
      .map(res => res.json()) 
      .subscribe(
      data => {}, 
      err => this.logError(err), 
      () => this.validateUser() 
     ); 

      this.nav.push(AccountViewPage); 
     } 
     } 

benötigen die Parameren wie dieser passieren

params: { 
    validateUsr: "false" 
} 

Antwort

24

Wenn Sie que senden möchten ry Parameter innerhalb einer GET-Anfrage, verwenden Sie das search Attribut anstelle der params ein:

constructor(private nav: NavController, public http: Http) { 
} 

onLogin(value: string): void { 
    if(this.authForm.valid) { 
     this.userData.login(); 
     let params = ''; 
     let options = new RequestOptions({ 
      // Have to make a URLSearchParams with a query string 
      search: new URLSearchParams('validateUsr=false') // <----- 
     }); 
     this.http.get('https://itunes.apple.com/us/rss/topmovies/limit=1/json', options) 
     .map(res => res.json()) 
     .subscribe(
     data => {}, 
     err => this.logError(err), 
     () => this.validateUser() 
    ); 

     this.nav.push(AccountViewPage); 
    } 
} 
+4

falls Sie sich fragen, wo URLSearchParams aus abzurufen: Import {URLSearchParams} von '@ Winkel/http'; – emp

+0

Was ist, wenn ich ein JS-Param-Objekt habe? – Toolkit

+0

@Toolkit Werfen Sie einen Blick auf meine Antwort unten, wenn Sie ein JS-Parameterobjekt übergeben möchten. Das JS-params-Objekt kann nicht direkt in der GET-Anfrage verwendet werden, aber es kann verwendet werden, um das params-Objekt aufzubauen, das verwendet werden kann. – jbgarr

11

Thierry's answer ist groß, aber für den Fall, Leute, eine Funktion zu schaffen suchen, der ein JS-Objekt von params akzeptieren kann übergeben werden, Ich wollte eine erweiterte Option hinzufügen. In der folgenden Funktion ist data ein optionales JS-Objekt von Schlüssel/Wert-Paaren, die an die Funktion übergeben werden können. Es wird dann iteriert und jedes Schlüssel/Wert-Paar wird zum URLSearchParams Hilfsobjekt (params) hinzugefügt. Sobald das Objekt params aufgebaut ist, kann es unter der RequestOptions-Eigenschaft (options) an die GET-Anforderung als search-Eigenschaft übergeben werden.

handleGet(service:string, data?:any):Observable<any[]> { 
    let params = new URLSearchParams(); 
    for(let key in data) { 
     params.set(key, data[key]); 
    } 
    let options = new RequestOptions({ 
     search: params 
    }); 
    return this._http.get(service, options) 
     .map(this._extractData) 
     .catch(this._handleError) 
     .finally(() => { 
      // do something... 
     }); 
}