我试图在通过 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 || {};
}
}
我想知道为什么会这样,如果这不是更改获取数据的方法,我该如何在服务中执行此操作(不是在订阅者组件中,因为我想根据另一个无关的变量更改数据与订户组件)
最佳答案
这是 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
的范围
关于angular - map 运算符调用的方法中的可观察范围变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39071864/