Angular service code refactoring
问题描述:
我在我的应用程序中遵循这种格式来与API进行通信并从中获取数据。Angular service code refactoring
以下是我们现在使用cpd
检测应用程序的代码复制从service.ts
getCheckoutDetails(): Observable<UserDetail> {
let query = `7668`;
return this.http
.get(this.appConfig.getAPIUrl()
+ `/buy/getDetails?${query}`)
.map(this.extractData)
.catch(this.handleErrors);
}
private extractData(res: Response) {
let data = res.json();
return data.body ? data.body.message ? data.body.message : {} : {};
}
private handleErrors(error: Response | any) {
let errMsg: string;
if (error instanceof Response) {
const body = error.json() || '';
const err = body.error || JSON.stringify(body);
errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
} else {
errMsg = error.message ? error.message : error.toString();
}
console.error(errMsg);
return Observable.throw(errMsg);
}
的一个代码,并抱怨说,只要我使用extractData
和handleErrors
代码是重复的。
有没有更好的方法来处理这个使用基类?
答
您可以将您的方法的基类是这样的:
class BaseService {
constructor(
private http: Http,
@Inject(AppConfig) private appConfig: AppConfig) {}
get(url: string) {
return this.http
.get(`${this.appConfig.getAPIUrl()}${url}`)
.map(this.extractData)
.catch(this.handleErrors);
}
private extractData(res: Response) {
let data = res.json();
return data.body ? data.body.message ? data.body.message : {} : {};
}
private handleErrors(error: Response | any) {
let errMsg: string;
if (error instanceof Response) {
const body = error.json() || '';
const err = body.error || JSON.stringify(body);
errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
} else {
errMsg = error.message ? error.message : error.toString();
}
console.error(errMsg);
return Observable.throw(errMsg);
}
}
class DetailsService extends BaseService {
getCheckoutDetails() {
let query = '7668';
return this.get(`/buy/getDetails?${query}`) }
}
你要像'getCheckoutDetails(){让查询= '7668';返回this.get('/ buy/getDetails?$ {query}')}'并且所有逻辑都将在基础服务中? – yurzui
感谢@yurzui发布它作为答案。我会标记它 – Sajeetharan