使用角度2在http GET中传递参数

vis*_*hnu 8 angular

如何使用角度2在GET调用中发送参数我尝试了以下方式,但得到一些错误说,

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'.
Run Code Online (Sandbox Code Playgroud)

功能调用:

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);
        }
      } 
Run Code Online (Sandbox Code Playgroud)

需要通过这样的参数,

params: {
   validateUsr: "false"
}
Run Code Online (Sandbox Code Playgroud)

Thi*_*ier 24

如果要在GET请求中发送查询参数,请使用该search属性而不是以下属性params:

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);
   }
} 
Run Code Online (Sandbox Code Playgroud)

  • 如果您想知道从哪里检索URLSearchParams:从{@ angular/http'导入{URLSearchParams}; (4认同)

jbg*_*arr 11

Thierry的答案很棒,但是如果人们想要创建一个可以接受params的JS对象的函数,我想添加一个扩展选项.在以下函数中,data是一个可以传递给函数的键/值对的可选JS对象.然后迭代它,每个键/值对将被添加到URLSearchParams辅助对象(params).一旦构建了params对象,它就可以作为object()search下的属性传递给GET请求.RequestOptionsoptions

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...
        });
}
Run Code Online (Sandbox Code Playgroud)