angular - map 运算符调用的方法中的可观察范围变化

标签 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 || {};
    }
}

我想知道为什么会这样,如果这不是更改获取数据的方法,我该如何在服务中执行此操作(不是在订阅者组件中,因为我想根据另一个无关的变量更改数据与订户组件)

最佳答案

这是 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/

相关文章:

angular - 如何在 IONIC 3 中使用路由

javascript - RxJs - Ajax 错误 0 而不是 502 occurres

javascript - 需要 RxJS 说明 : how to return a plain object instead of an Observable

angular - 在发出两个可观察对象的第一个值后,Zip 不发出值

html - 如何使用 `<a>` 链接标记以 Angular 4 提交表单

javascript - Angular 4 使用 Angular 动画为任何高度/位置变化设置动画

angular - 为什么从 Observable 到 Promise 的转换在我的 Angular 应用程序中不起作用?

angular - fromEvent 未在带有 'change' 的指令内触发,但带有 'click' 是

angular - 如何仅在单击相应语言按钮时才加载 json 文件?

node.js - Angular 2在不重新启动的情况下不显示图像