我试图在map操作员调用的方法中返回之前更改我的数据,我发现该方法之外的所有其他变量都是undefined
我在这里写了一个简单的代码来表示我的意思,记录的测试变量返回为undefined
:
import {Observable} from "rxjs/Observable";
import {Injectable} from "@angular/core";
import {Http, Response} from "@angular/http";
@Injectable()
export class DataService {
private API_URL= 'url...';
private test = 1;
constructor(private http: Http) {}
getData(): Observable<any> {
return this.http.get(this.API_URL)
.map(this.extractData)
.catch(this.handleError);
}
private extractData(res: Response) {
let body = res.json();
console.log(test);
return body.data || {};
}
}
我想知道为什么会发生这种情况,如果它不是改变获取数据的方式,我怎么能在服务中做到这一点(而不是在订阅者组件中,因为我想根据另一个无关的变量更改数据用户组件)
答案 0 :(得分:7)
这是一个JS&#34;功能&#34; ; - )
您需要使用.bind(this)
return this.http.get(this.API_URL)
.map(this.extractData.bind(this))
.catch(this.handleError.bind(this));
或箭头功能
return this.http.get(this.API_URL)
.map(val => this.extractData(val))
.catch(err => this.handleError(err));
保留this