2016-06-14 6 views
1

Я хотел бы иметь модель, которая обновляет внутренний сервер сам по себе, но когда я импортирую Http, он не определен.Угловая 2 - Вставить Http в класс (модель)

import {Http, Headers} from "@angular/http"; 

     export class Vehicle { 
      engine:string 
      id:number 

      constructor(private http:Http){ 
      } 

      update() {    
      const body = JSON.stringify(engine); 
      const headers = new Headers(); 
      headers.append('Content-Type', 'application/json'); 
      return this._http.put('http://localhost/v1/vehicles/' + id, body, {headers: headers}) 
       .map(response => response.json()); 
      } 

     } 

Идея то, чтобы сделать что-то вроде:

var vehicle = new Vehicle(); 
vehicle.update(); //this then would update the back end 

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

В этом случае он преобразуется правильно и ошибок нет НО, но http не определено.

Я могу добиться того, что хочу в службе ng2, получив содержимое экземпляра автомобиля, а затем передав его в службу VehicleList, но задавался вопросом, возможно ли это сделать прямо в самом классе Vehicle.

ответ

4

Это связано с тем, что вы сами создаете экземпляр Vehicle, и поэтому Angular не может разрешить вам класс Http. Возможным решением было бы ввести Http самостоятельно - в constructor или в самом методе update().

class Component1 { 
    constructor(private _http: Http) { } 

    [...] 

    var vehicle = new Vehicle(this._http); 
    vehicle.update(); 
} 

Update: Однако вы можете решить сами в Vehicle классе с ReflectiveInjector, как это:

import {HTTP_PROVIDERS, Http, Headers} from "@angular/http"; 
import {ReflectiveInjector} from '@angular/core'; 

export class Vehicle { 
    engine:string; 
    id:number; 

    constructor(private _http: Http){ 
    var injector = ReflectiveInjector.resolveAndCreate([HTTP_PROVIDERS]); 
    this._http = injector.get(Http); 
    } 

    update() {    
    const body = JSON.stringify(engine); 
    const headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 
    return this._http.put('http://localhost/v1/vehicles/' + id, body, {headers: headers}) 
     .map(response => response.json()); 
    } 
} 

Plunker для справки

+0

Есть ли способ для класса Vehicle создать экземпляр класса Http без необходимости вводить класс Http при создании экземпляра транспортного средства? – Nik

+0

Да, я нашел способ. Я обновляю через секунду. – rinukkusu

+0

Почему вы не хотите вводить «Http»? –

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