2

想要读取 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;
    }

}

但是遇到了这样的错误:

在此处输入图像描述

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

第二个问题:

当我这样做时:

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

this指向的不是类,而是订阅者实例。为什么这样?我认为 TypeScript 中的“fat-arrow”-lambda 可以帮助我们摆脱这种奇怪的闭包。

4

2 回答 2

2

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

 import 'rxjs/add/operator/map';

无需在构造函数中执行 http 请求,您应该将其设为自己的方法。不久前我对名称进行了更改的示例,因此在您的上下文中更有意义:

@Injectable()
export class SettingsProvider{

  constructor(public http: Http) {
  }

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

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

于 2016-01-11T11:43:24.577 回答
0

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

getbranch (){ return this.http.get("/branch").map( res => $.parseJSON(res._body) ).subscribe( data => this.branches = data ,error => alert('否找到数据') )}

于 2017-04-16T10:25:45.410 回答