angular httpClient按日期获取带或不带过滤器的订单

时间:2018-04-12 23:09:18

标签: angular angular-services angular2-observables

我的规格日期表示获取订单,其中date = date1> =:date和date2 =< :日期,如果两个日期都为空,它应该基本上返回所有订单 基本上两个网址都应该从一个服务传递 baseUrl:string =' http://localhost:8088/orders&#39 ;;   private filterUrl:string =' http://localhost:8088/orders?start=& end =';

我如何在角度服务中实现这一点,以及如何在我的组件中调用它 我就是这样开始的,但是我对角度的新手不知道如何通过逻辑

  getOrders(From: Date, To: Date): Observable<Order[]> {
return this.http.get(this.baseUrl + '?start=' + From + '&end=' +To)
  .pipe(map(this.extractData),
    tap(data => console.log(JSON.stringify(data))),
    catchError(this.handleError)
  );

} 我想要的是我的html自动显示整个列表,如果两个日期都通过我应该过滤,我的想法是我不会在这种情况下需要baseUrl上面我将使用过滤网址和默认值应为null 谁能告诉我如何继续谢谢你。 这是我的sql incase

SELECT orderId, petrolQty, orderDate, truckId from orderz \
where (orderDate>=:start or :start is null) and (orderDate<=:end or :end is null)

所以基本上我将按orderDate过滤 所以我现在所做的就是这个

 baseUrl : string = 'http://localhost:8088/orders';

  getOrders(From: Date, To: Date): Observable<Order[]> {
    return this.http.get(this.baseUrl + '?start=' + From + '&end='+To)
      .pipe(map(this.extractData),
        tap(data => console.log(JSON.stringify(data))),
        catchError(this.handleError)
      );
  }

在我的组件中我做了这个

  start: Date = null;
  end: Date = null;

  constructor(private orderService: OrderService, private router: Router) {
  }

  ngOnInit() {
    this.orders = this.getOrdersDto();
  }


  private getOrdersDto() {

    return this.orderService.getOrders(this.start, this.end)
  }

url我设置为null并尝试postman它给了异常unarcable日期null,这是因为我将它们设置为null,现在问题是我可以创建和如果服务获取方法,那将使用&#39; { {3}}当日期设置为空时,当我输入日期时,它将使用新日期来过滤

1 个答案:

答案 0 :(得分:1)

不要动态构建您的网址,而是让Angular为您做到这一点。

import { HttpClient, HttpParams } from '@angular/common/http';

baseUrl : string = 'http://localhost:8088/orders';

getOrders(from: Date, to: Date): Observable<Order[]> {
    const params = new HttpParams();

    if (from) {
        params.set('start', from);
    }

    if (to) {
        params.set('end', to);
    }

    return this.http.get(this.baseUrl, { params: params })
        ...;
}