我希望有一个模型可以自动更新后端,但是当我导入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服务。
答案 0 :(得分:4)
这是因为您自己创建了Vehicle
的实例,因此Angular无法为您解析Http
类。一种可能的解决方案是自己注入Http
- constructor
或update()
方法本身。
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以供参考