Angular 2: parent class 注入的依赖未定义
Angular 2: parent class dependency injected is undefined
我正在尝试实施一项服务,所有其他服务都将扩展该服务以处理 api 响应。我关注了这个问题
这是我的 parent class:
import {Injector} from '@angular/core';
import {Router} from "@angular/router";
import {Response} from "@angular/http";
export class ApiService {
protected _router: Router;
constructor(injector: Injector) {
console.log('inside ApiService constructor');
this._router = injector.get(Router);
console.log(this._router);
}
extractData(res: Response) {
if (res.json().status === 200) {
return res.json().data;
}
}
extractResponse(res: Response) {
if (res.json().status === 200) {
return res.json();
}
}
handleErrorPromise(error: Response | any) {
console.log('inside handleErrorPromise');
console.error(error.message || error);
console.log(this._router);
if (error.status === 401 || error.status === "401") {
// session out
this._router.navigate(['/login']);
} else {
return Promise.reject(error.json().message | error.message || error);
}
}
}
这是扩展它的服务:
@Injectable()
export class VitalService extends ApiService {
constructor(private http: Http, injector: Injector) {
super(injector);
}
getUserVitals(): Promise<VitalDashboardItem[]> {
return this.http.get('/gch-restful/vital-entry/dashboard')
.toPromise()
.then(response => {
return response.json().data as VitalDashboardItem[];
})
.catch(this.handleErrorPromise);
}
}
但是当它到达 super 中的 handleErrorPromise 时 class
我收到此错误:
Error: Uncaught (in promise): TypeError: Cannot read property '_router' of undefined
TypeError: Cannot read property '_router' of undefined
一段时间以来,我一直在努力找出问题所在,尝试了一些方法,但都没有成功。感谢任何帮助
编辑
改成这样:
getUserVitals(): Promise<VitalDashboardItem[]> {
return this.http.get('/gch-restful/vital-entry/dashboard')
.toPromise()
.then(response => {
return response.json().data as VitalDashboardItem[];
})
.catch((e) => {
return this.handleErrorPromise(e)
});
}
你失去了这里的 this
上下文:
.catch(this.handleErrorPromise);
改为:
.catch((e) => { this.handleErrorPromise(e) });
有关信息,请参阅 。
我正在尝试实施一项服务,所有其他服务都将扩展该服务以处理 api 响应。我关注了这个问题
这是我的 parent class:
import {Injector} from '@angular/core';
import {Router} from "@angular/router";
import {Response} from "@angular/http";
export class ApiService {
protected _router: Router;
constructor(injector: Injector) {
console.log('inside ApiService constructor');
this._router = injector.get(Router);
console.log(this._router);
}
extractData(res: Response) {
if (res.json().status === 200) {
return res.json().data;
}
}
extractResponse(res: Response) {
if (res.json().status === 200) {
return res.json();
}
}
handleErrorPromise(error: Response | any) {
console.log('inside handleErrorPromise');
console.error(error.message || error);
console.log(this._router);
if (error.status === 401 || error.status === "401") {
// session out
this._router.navigate(['/login']);
} else {
return Promise.reject(error.json().message | error.message || error);
}
}
}
这是扩展它的服务:
@Injectable()
export class VitalService extends ApiService {
constructor(private http: Http, injector: Injector) {
super(injector);
}
getUserVitals(): Promise<VitalDashboardItem[]> {
return this.http.get('/gch-restful/vital-entry/dashboard')
.toPromise()
.then(response => {
return response.json().data as VitalDashboardItem[];
})
.catch(this.handleErrorPromise);
}
}
但是当它到达 super 中的 handleErrorPromise 时 class
我收到此错误:
Error: Uncaught (in promise): TypeError: Cannot read property '_router' of undefined
TypeError: Cannot read property '_router' of undefined
一段时间以来,我一直在努力找出问题所在,尝试了一些方法,但都没有成功。感谢任何帮助
编辑
改成这样:
getUserVitals(): Promise<VitalDashboardItem[]> {
return this.http.get('/gch-restful/vital-entry/dashboard')
.toPromise()
.then(response => {
return response.json().data as VitalDashboardItem[];
})
.catch((e) => {
return this.handleErrorPromise(e)
});
}
你失去了这里的 this
上下文:
.catch(this.handleErrorPromise);
改为:
.catch((e) => { this.handleErrorPromise(e) });
有关信息,请参阅