2016-06-14 2 views
1

그 자체로 백엔드를 업데이트하는 모델을 갖고 싶습니다. 그러나 HTTP를 가져올 때 정의되지 않습니다. 내가 (위의 예에서 반드시 문법적 정확성에 대해 걱정하지) 후있어 무엇을 보여주기 위해 클래스를 단순화했습니다각도 2 - 클래스 (모델)에 Http 삽입

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

:

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

     } 

아이디어는 다음과 같은 일을 할 것입니다.

이 시나리오에서는 올바르게 바뀌고 오류가 없습니다 하지만 http는 정의되지 않았습니다.

차량 인스턴스의 내용을 가져 와서 VehicleList 서비스로 전달하면 ng2 서비스에서 원하는 것을 얻을 수 있지만 Vehicle 클래스 자체에서 올바르게 수행 할 수 있는지 궁금합니다.

답변

4

사용자가 직접 Vehicle의 인스턴스를 생성하므로 Angular가 Http 클래스를 해결할 수 없기 때문입니다. 가능한 해결책은 constructor 또는 update() 메소드 자체에 Http을 직접 주입하는 것입니다.

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

    [...] 

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

는 업데이트 : 당신은 그러나이 같은 ReflectiveInjector으로 Vehicle 클래스에서 직접 해결할 수 있습니다

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'를 삽입하고 싶지 않습니까? –