我试图在通过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 || {};
}
}
我想知道为什么会发生这种情况,如果这不是更改获取的数据的方法,我如何在服务中进行更改(不是在订阅者组件中,因为我想基于与订阅者组件无关的另一个变量来更改数据)。
发布于 2016-08-22 13:28:09
这是JS的“特性”;-)
您需要使用.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
的作用域
https://stackoverflow.com/questions/39071864
复制相似问题