相关疑难解决方法(0)

Angular 4 HttpClient查询参数

我一直在寻找一种方式来传递查询paramters与新API调用HttpClientModuleHttpClient,还没有找到一个解决方案.使用旧Http模块,您可以编写类似这样的内容.

getNamespaceLogs(logNamespace) {

    // Setup log namespace query parameter
    let params = new URLSearchParams();
    params.set('logNamespace', logNamespace);

    this._Http.get(`${API_URL}/api/v1/data/logs`, { search: params })
}
Run Code Online (Sandbox Code Playgroud)

这将导致对以下URL的API调用:

localhost:3001/api/v1/data/logs?logNamespace=somelogsnamespace

但是,新HttpClient get()方法没有search属性,所以我想知道在哪里传递查询参数?

http typescript lodash angular angular-httpclient

123
推荐指数
5
解决办法
15万
查看次数

Interceptor Angular 4.3 - 在克隆的请求上设置多个标头

我刚刚注意到新Interceptor中不再支持可能在先前的HTTP RequestsOption中使用的Header对象.

这是新的拦截器逻辑:

// Get the auth header from the service.
const authHeader = this.auth.getAuthorizationHeader();
// Clone the request to add the new header.
const authReq = req.clone({headers: req.headers.set('Authorization', authHeader)});
Run Code Online (Sandbox Code Playgroud)

我现在有两种方法可以在此请求中添加标题:

例:

headers?: HttpHeaders;

    headers: req.headers.set('token1', 'asd')
Run Code Online (Sandbox Code Playgroud)
setHeaders?: {
   [name: string]: string | string[];
};

    setHeaders: {
             'token1': 'asd',
             'token2': 'lol'
    }
Run Code Online (Sandbox Code Playgroud)

如何在此请求中有条件地添加多个标头?与我以前使用Header对象相同:

 myLovellyHeaders(headers: Headers) {
    headers.set('token1', 'asd');
    headers.set('token2', 'lol');
     if (localStorage.getItem('token1')) {
     headers.set('token3', 'gosh');
     }
    }
    const headers = new Headers();
    this.myLovellyHeaders(headers);
Run Code Online (Sandbox Code Playgroud)

header interceptor angular

22
推荐指数
4
解决办法
3万
查看次数

Angular:将查询参数附加到URL

我用这个:

import { HttpParams } from '@angular/common/http';
let params = new HttpParams();
  params.append('newOrdNum','123');
Run Code Online (Sandbox Code Playgroud)

但这不起作用,我不会在网址中附加param.有什么建议吗?

query-parameters angular2-routing angular2-router angular

15
推荐指数
3
解决办法
3万
查看次数

Angular> = 4.3,httpClient.get params为空

我正在尝试将Http请求迁移到HttpClient请求.我能够迁移我的post查询但我在迁移get查询时遇到问题.当我这样做时,我的后端没有分别收到任何参数,它告诉我没有提供参数并且为空.

我做错什么了吗?

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

constructor(private httpClient: HttpClient) {}

findItems() {
   let params: HttpParams = new HttpParams();
   params.set('something', 'hello');

   this.httpClient.get<any[]>('http://localhost:3000/apath/', {params})
    .subscribe((results: any[]) => {
      console.log(results);
    }, (errorResponse: any) => {
       console.error(errorResponse);
    });
}
Run Code Online (Sandbox Code Playgroud)

任何的想法?

angular-http angular

4
推荐指数
1
解决办法
3182
查看次数

为什么大多数类的HttpClient API都定义了不可变对象?

HttpClient文档说明了关于不变性的以下内容:

存在拦截器来检查和改变传出请求和传入响应.但是,了解HttpRequest和HttpResponse类在很大程度上是不可变的可能会令人惊讶.

这是有原因的:因为app可能会重试请求,拦截器链可能会多次处理单个请求.如果请求是可变的,则重试的请求将与原始请求不同.不可变性确保拦截器在每次尝试时都看到相同的请求.

我发现很难理解这个解释.有人可以提供解释吗?

immutability angular angular-httpclient

3
推荐指数
1
解决办法
809
查看次数

如何使用 HttpClient 在 Angular 4.3 上使用对象为 HTTP 请求创建 HttpParams

我有完全 angular 版本 4.3.2,由于依赖关系我无法更新。所以现在我坚持这个版本。我有一个带有动态参数的对象(里面可以有其他键和值):

let query = {
    param1: 1,
    param2: 'a'
}
Run Code Online (Sandbox Code Playgroud)

我想做类似的事情:

params = new HttpParams();
params = params.append(query);
return this.httpClient.get(this.config.apiUrl + '/items', {
            params: params,
            headers: headers
        });
Run Code Online (Sandbox Code Playgroud)

但没有这样的 params.append(query) 方法。所以我需要遍历查询键并将它们一一添加到参数中。有没有更简单的解决方案?

编辑1:

根据这个答案,这可以从 angular 5.0.0-beta.6 (2017-09-03) 开始完成,但对我来说不是解决方案。 /sf/answers/3242253031/

angular angular-httpclient

1
推荐指数
2
解决办法
5693
查看次数