在请求URL中添加params在Angular4中不起作用

时间:2017-08-04 05:59:48

标签: angular

我正在使用mdPaginator:

@android:style/Widget.Holo.CompoundButton.RadioButton

并有一个selectPage函数:

<md-paginator
    [length]="mdPag.length"
    [pageSize]="mdPag.pageSize"
    [pageSizeOptions]="mdPag.pageSizeOptions"
    (page)="selectPage($event)">
  </md-paginator>

而且,我的httpClient服务执行此操作:

  selectPage(event) {
    // [A]
    // let params: URLSearchParams = new URLSearchParams
    // params.set("page", event.pageIndex+1)
    // params.set("per_page", event.pageSize)
    // this.httpClient
    //     .get("/proxy/api/team/order_list", params)
    //     .map(res => res.json())
    // ...

    // [B]
    // this.httpClient
    //     .get(`/proxy/api/team/order_list?page=${event.pageIndex+1}&per_page=${event.pageSize}`)
    //     .map(res => res.json())
    // ...

    // [C]
       this.httpClient
           .get(`/proxy/api/team/order_list?page=${event.pageIndex+1}&per_page=${event.pageSize}`)
           .toPromise()
  }

我不知道为什么,但只有像[C]这样的写作才能奏效。我的意思是,在网络上,我可以看到我的请求网址是正确的,当[A] / [B],请求网址是&#39; / proxy / api / team / order_list&#39;时,似乎他们没有得到参数虽然我可以在HttpClient的get函数中控制它。

1 个答案:

答案 0 :(得分:0)

我在A,B和C之间看到的一个巨大差异是他们返回了非常不同的类型。请在您的函数中添加一个返回类型,IDE会告诉您(我希望您使用的是智能IDE,如果没有,那么Visual Studio Code或IntelliJ都是很好的选择,会告诉您打字稿是错误的)。一个非常好的habbit总是明确地写类型(变量,参数,函数参数,返回类型等)。

所以我的意思是C返回Promise<Response>(定义{{​​3}}),而A和B都返回Observable<ResponseJsonType>,其中ResponseJsonType是返回的JSON对象的类型在你的http响应。我不知道你如何使用selectPage(event)的返回对象,但这可能是一个问题。