【发布时间】:2016-05-09 13:57:51
【问题描述】:
"angular2": "2.0.0-beta.17",
我希望能够在我的Base 中使用import { Http, Response } from 'angular2/http'; 并在子类中使用http。
有没有办法做到这一点?
附:我不是在寻找“干净”的解决方案,欢迎使用黑客、变通方法和类似的东西
基类:
import { Http, Response } from 'angular2/http';
export class ServiceBase {
constructor (private http: Http) {}
}
还有一个子类:
import { ApiServiceBase } from '../../api-service-base';
import { Injectable } from 'angular2/core';
// import { Http, Response } from 'angular2/http';
import { AuthUser } from './auth_user';
import { Observable } from 'rxjs/Observable';
import { Headers, RequestOptions } from 'angular2/http';
import 'rxjs/add/operator/toPromise';
@Injectable()
export class LoginService extends ApiServiceBase {
constructor () {
super();
}
private url = 'http://localhost:8080/api/signin';
login (user: AuthUser): Promise<AuthUser> {
let body = JSON.stringify(user);
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
return this.http.post(this.url, body, options)
.toPromise()
.then(this.extractData)
.catch(this.handleError);
}
private extractData(res: Response) {
console.log(res);
if (res.status < 200 || res.status >= 300) {
throw new Error('Bad response status: ' + res.status);
}
let body = res.json();
return body.data || { };
}
private handleError (error: any) {
}
}
【问题讨论】:
-
为什么不想在子类中导入?
-
但我想,你不关心“干净”的解决方案吗?这将比替代方案更“hacky”,不是吗?
-
为了避免一行
import而添加所有这些额外的复杂性似乎是不必要的。实际上,您已经在子类中为Headers和RequestOptions导入了来自angular2/http的内容 - 为什么不直接添加Http和Response呢? -
这不仅仅是一行,而是每个子服务的一行。当我想为我的所有
child services添加一些东西时,这会派上用场
标签: typescript angular