Angular 2. Http map \ subscribe issue

时间:2016-01-11 10:39:02

标签: angular typescript angular2-http

想要读取json文件并构建settingsProvider。

所以我这样做:

import {Http} from "angular2/http";
import {Injectable} from "angular2/core";

@Injectable()
export class SettingsProvider{
    url: string = "";
    constructor(http: Http){
        http.request('js/app/config/config.json').map(data => data.json()).subscribe(data => this.url = data.url);
    }

    getUrl():string {
        return this.url;
    }

}

但是出现了这样的错误:

enter image description here

所以,我的第一个问题是 - 为什么会这样?

第二个问题:

当我这样做时:

http.request('js/app/config/config.json').subscribe(data => {
            this.url = data.json().url;
        });

不是指向类,而是指向订阅服务器实例。 为什么这样? 我认为TypeScript中的“胖箭”-lambda帮助我们摆脱这种奇怪的闭包。

2 个答案:

答案 0 :(得分:2)

需要从RXJS导入Map函数,例如:

 import 'rxjs/add/operator/map';

不需要在构造函数中执行http请求,您应该将它作为自己的方法。从前一段时间开始的一个例子我用名字改变了所以它在你的上下文中更有意义:

@Injectable()
export class SettingsProvider{

  constructor(public http: Http) {
  }

  getSettings() {
    //http request code here
  }
}

如果你没有基于此工作,我可以在以后包含更多代码。导入应至少解决您的地图问题。

答案 1 :(得分:0)

我也得到这样的错误来检索分支json,所以我改变了地图。我使用$ .parseJSON(res._body),它工作正常。

getbranch(){return this.http.get(“/ branch”)。map(         res => $ .parseJSON(res._body)         )。订阅(             data => this.branches =数据             ,error =>警报('找不到数据'))}