map操作符调用的方法中的可观察范围更改

时间:2016-08-22 05:23:15

标签: angular rxjs

我试图在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 || {};
    }
}

我想知道为什么会发生这种情况,如果它不是改变获取数据的方式,我怎么能在服务中做到这一点(而不是在订阅者组件中,因为我想根据另一个无关的变量更改数据用户组件)

1 个答案:

答案 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

的范围