我是Angular 2和Observable的新手,所以我很抱歉如果我的問題很瑣碎。無論如何,我試圖使用RxJS來測試Angular 2 HTTP客戶端。雖然我得到它的工作,我需要添加更多的邏輯,我目前正在處理的服務。基本上我想有一個映射函數將我從我連接的Web服務接收到的對象轉換爲我在Angular中使用的模型對象。Angular2 RxJS從地圖函數調用類函數
這是工作的代碼:
import { Injectable } from 'angular2/core';
import { Http, Response } from 'angular2/http';
import { Observable } from 'rxjs/Observable';
import { Person } from '../models/person';
@Injectable()
export class PersonsService {
constructor(private http: Http) { }
private personsUrl = 'http://localhost/api/persons';
getPersons(): Observable<Person[]> {
return this.http.get(this.personsUrl)
.map(this.extractData)
.catch(this.handleError);
}
private extractData(res: Response) {
if(res.status < 200 || res.status >= 300) {
throw new Error('Bad response status ' + res.status);
}
let body = res.json();
return body.data || {};
}
private handleError(error: any) {
let errMsg = error.message;
return Observable.throw(errMsg);
}
}
與上面的代碼我沒有任何問題。我遇到的問題是我想將我從服務中獲得的對象映射到我在Angular中獲得的對象,即Person
。我所嘗試的是調用.map
函數正在使用的extractData
函數中的另一個函數。
private extractData(res: Response) {
if(res.status < 200 || res.status >= 300) {
throw new Error('Bad response status ' + res.status);
}
let body = res.json();
// map data function
var data = this.mapData(body.data);
return data || {};
}
private mapData(data: any) {
// code to map data
}
顯然上面的代碼不工作當this
在extractData
函數內部參考,this
不指PersonsService
類,但它是指一種MapSubscriber
對象。
我不知道是否可以調用「外部」函數。這可能是一件愚蠢的事情,但我無法找到任何有關這方面的信息。
完美!非常感謝:)你能解釋一下它的推理嗎? –
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions沒有它'this'將指向調用的函數。 –
我把頭髮拉出來。謝謝! –