2016-01-11 5 views
2

хотите прочитать json-файл и установить settingsProvider.Угловая 2. Http map subscribe issue

Так я делаю это так:

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

это точки не в классе, а к примеру подписчика. Почему так? Я думал, что «жирная стрела» -lambda в TypeScript поможет нам избавиться от этого странного закрытия.

функция

ответ

2

Карта должна быть импортирована из RXJS, попробуйте, например:

import 'rxjs/add/operator/map'; 

Там нет необходимости делать запрос HTTP внутри конструктора, вы должны сделать это его собственный метод. Пример из некоторого времени назад, что я сделал с именами изменился, так что имеет смысл в вашем Contex:

@Injectable() 
export class SettingsProvider{ 

    constructor(public http: Http) { 
    } 

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

я могу включать больше коды позже, если вы не получите его на работу на этой основе. Импорт должен решить вашу проблему карты по крайней мере.

+0

Это помогло с функцией карты, но не решило эту проблему ... «эта» внутри лямбда все еще указывает на подписчика .. а не на класса SettingsProvider. Почему так? – korovaisdead

+0

Такая же проблема: нашли ли вы решение? –

0

Я также получаю такую ​​ошибку, чтобы получить ветку json, поэтому я меняю карту. Я использовал $ .parseJSON (res._body), и он отлично работает.

getbranch() {вернуться this.http.get ("/ филиал"). Карта ( Рез => $ .parseJSON (res._body) ) .subscribe ( данных => this.branches = данные , error => alert («Данные не найдены»))}

Смежные вопросы