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;
    }

}

しかし、次のようなエラーが発生しました。

ここに画像の説明を入力

では、私の最初の質問は、なぜそうなのかということです。

2 番目の質問:

私がこのようにやっているとき:

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

これは、クラスではなく、Subscriber インスタンスを指しています。なんでそうなの?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 に答える