有没有办法避免在每个服务中编写相同的代码。
我有针对不同 API 端点的多个服务:
getLecturesData(orderBy?: string, orderDirection = 'asc', page = 1, pageSize = 10): Observable<LecturesData> {
let params = new HttpParams();
params = params.set('order_direction', orderDirection);
params = params.set('page', page.toString());
params = params.set('page_size', pageSize.toString());
if (orderBy) { params = params.set('order_by', orderBy); }
return this.http.get<LecturesData>('/api/lectures', {params});
}
getStudentsData(orderBy?: string, orderDirection = 'asc', page = 1, pageSize = 5): Observable<StudentsData> {
let params = new HttpParams();
params = params.set('order_direction', orderDirection);
params = params.set('page', page.toString());
params = params.set('page_size', pageSize.toString());
if (orderBy) { params = params.set('order_by', orderBy); }
return this.http.get<StudentsData>('/api/students', {params});
}
如您所见,除了返回值的 url
和 type
之外,代码几乎相同。
是否可以将重复的部分放在单独的“东西”中?
最佳答案
我将为参数创建一个接口(interface),并创建一个私有(private)通用函数来发出请求。
export interface QueryOptions {
orderBy?: string;
orderDirection: string;
page: number;
pageSize: number;
}
getLecturesData(options: QueryOptions): Observable<LecturesData> {
return this.getData<StudentsData>('/api/lectures', options);
}
getStudentsData(options: QueryOptions): Observable<StudentsData> {
return this.getData<StudentsData>('/api/students', options);
}
private getData<T>(options: QueryOptions): Observable<T> {
const params: HttpParams = this.getOptionsParams(options);
return this.http.get<T>(url, {params});
}
private getOptionsParams(options: QueryOptions): HttpParams {
let params = new HttpParams();
params = params.set('order_direction', options.orderDirection || 'asc');
params = params.set('page', (page || 1).toString());
params = params.set('page_size', (pageSize || 10).toString());
if (orderBy) { params = params.set('order_by', orderBy); }
return params;
}
关于javascript - 如何避免 Angular 服务中的重复方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60727531/