javascript - 如何避免 Angular 服务中的重复方法

标签 javascript angular dry

有没有办法避免在每个服务中编写相同的代码。

我有针对不同 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});
  }

如您所见,除了返回值的 urltype 之外,代码几乎相同。 是否可以将重复的部分放在单独的“东西”中?

最佳答案

我将为参数创建一个接口(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/

相关文章:

javascript - 从数组中取较大的值作为 0 并预览并忽略另一个包含 0 的值

Angular 2 没有将 Content-Type 设置为 'multipart/form-data' 而是设置为 'application/json'

scala - 如何在 Scala 中为子类实现 DRY 复制构造函数?

javascript - Angular-如何动态输出验证

c# - 在 C# 中创建一个可以采用 double 、十进制和 float 而不重复代码的方法

c - 为什么特定的 C 数据类型在多个标准头文件中声明?

javascript - Bootstrap 轮播指示器位置当前与轮播内容重叠

javascript - 如果 jquery 没有加载然后从这里加载 jquery

Javascript:反垃圾邮件自动主持人 (Discord.js)

javascript - 如何有条件地启用 ng2-smart-table 的可编辑属性