Angular2 http使用Observables和动态url参数获取请求。如何?

时间:2016-09-08 11:01:17

标签: http url angular get request

从具有Observable的官方文档中获取此angular2服务,尝试修改为可以传递到基础heroesUrl动态参数,如app/heroes/{{country}}并使用它像

getHeroes(country) {}

import { Injectable }     from '@angular/core';
import { Http, Response } from '@angular/http';
import { Hero }           from './hero';
import { Observable }     from 'rxjs/Observable';
@Injectable()
export class HeroService {
  constructor (private http: Http) {}
  private heroesUrl = 'app/heroes';  // URL to web API
  getHeroes (): Observable<Hero[]> {
    return this.http.get(this.heroesUrl)
                    .map(this.extractData)
                    .catch(this.handleError);
  }
  private extractData(res: Response) {
    let body = res.json();
    return body.data || { };
  }
  private handleError (error: any) {
    // In a real world app, we might use a remote logging infrastructure
    // We'd also dig deeper into the error to get a better message
    let errMsg = (error.message) ? error.message :
      error.status ? `${error.status} - ${error.statusText}` : 'Server error';
    console.error(errMsg); // log to console instead
    return Observable.throw(errMsg);
  }
}

我该怎么做?

1 个答案:

答案 0 :(得分:1)

如果我理解你的观点,我认为你只需要做一些事情,

getHeroes(country) {}


export class HeroService {
  constructor (private http: Http) {}
  private heroesUrl = 'app/heroes';  // URL to web API
  getHeroes (country): Observable<Hero[]> {               //<-----added parameter
    return this.http.get(this.heroesUrl + '/' + country)  //<-----changed
                    .map(this.extractData)
                    .catch(this.handleError);
  }
  ...
  ...
}