Angular 2 - 将Http插入类(模型)

时间:2016-06-14 13:00:22

标签: typescript angular

我希望有一个模型可以自动更新后端,但是当我导入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。

我可以通过获取车辆实例的内容然后将它们传递到VehicleList服务但是想知道是否可以在Vehicle类本身中做到这一点来实现我想要的ng2服务。

1 个答案:

答案 0 :(得分:4)

这是因为您自己创建了Vehicle的实例,因此Angular无法为您解析Http类。一种可能的解决方案是自己注入Http - constructorupdate()方法本身。

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

    [...]

    var vehicle = new Vehicle(this._http);
    vehicle.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以供参考