Angular 在5中从http抛出错误移动到httpClient
我正在尝试为restservice创建新的包装器,我正在尝试将angular 4移动到5并升级相同的服务。我得到的错误如下。如果我将Angular 在5中从http抛出错误移动到httpClient,angular,typescript,Angular,Typescript,我正在尝试为restservice创建新的包装器,我正在尝试将angular 4移动到5并升级相同的服务。我得到的错误如下。如果我将Observable更改为Observable,我也会得到错误: “HttpHeaders”类型的参数不可分配给“{headers?:HttpHeaders |{[header:string]:string | string[];};observe?:“body”;params?:Ht…”类型的参数。 属性“headers”在类型“HttpHeaders”中是私有的
Observable
更改为Observable
,我也会得到错误:
“HttpHeaders”类型的参数不可分配给“{headers?:HttpHeaders |{[header:string]:string | string[];};observe?:“body”;params?:Ht…”类型的参数。属性“headers”在类型“HttpHeaders”中是私有的,但在类型“{headers?:HttpHeaders |{[header:string]:string | string[];}中不是私有的;注意?:“body”;参数?: 下面是代码
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { HttpClient, HttpRequest, HttpHeaders, HttpResponse } from '@angular/common/http';
@Injectable()
export class httpService {
private requestHeaders: HttpHeaders;
constructor(private _http: HttpClient) {
this.requestHeaders = new HttpHeaders();
this.requestHeaders.append('Content-Type', 'application/json');
this.requestHeaders.append('Accept', 'application/json');
}
post(url: string, requestData?: any): Observable<Response> {
return this._http.post(url, requestData, this.requestHeaders);
}
}
headers只是选项的一个参数,所以您应该传入
{headers: this.requestHeaders}
这还将修复您看到的属性“headers”为private…
错误
而且,是不可变的。因此,每个变异运算符都会返回一个新实例。这意味着要正确设置需要执行的头
this.requestHeaders = new HttpHeaders()
.append('Content-Type', 'application/json')
.append('Accept', 'application/json');
或
更新: 因此,post observable返回类型为
observable
,但您的方法被声明为返回类型observable
,导致类型不匹配。HttpClient
希望您将返回类型传递给方法this.http.post(…)
(或者它将采用返回类型)。因此,您的方法应更新为
post<T>(url: string, requestData?: any): Observable<T> {
return this.http.post<T>(url, requestData, {headers: this.requestHeaders});
}
headers只是选项的一个参数,所以您应该传入
{headers: this.requestHeaders}
这还将修复您看到的属性“headers”为private…
错误
而且,是不可变的。因此,每个变异运算符都会返回一个新实例。这意味着要正确设置需要执行的头
this.requestHeaders = new HttpHeaders()
.append('Content-Type', 'application/json')
.append('Accept', 'application/json');
或
更新: 因此,post observable返回类型为
observable
,但您的方法被声明为返回类型observable
,导致类型不匹配。HttpClient
希望您将返回类型传递给方法this.http.post(…)
(或者它将采用返回类型)。因此,您的方法应更新为
post<T>(url: string, requestData?: any): Observable<T> {
return this.http.post<T>(url, requestData, {headers: this.requestHeaders});
}
append()
的实现是:
append(name: string, value: string|string[]): HttpHeaders {
return this.clone({name, value, op: 'a'});
}
它返回hte headers对象的克隆。您需要将返回的结果存储/分配给变量this.requestHeaders
,否则将无法保存
或者,构造函数os HttpHeaders是:
constructor(headers?: string|{[name: string]: string | string[]})
一个更干净的方法是:
const headerJson = {
'Content-Type': 'application/json',
'Accept' : 'application/json'
}
this.header = new HttpHeaders(headerJson);
append()
的实现是:
append(name: string, value: string|string[]): HttpHeaders {
return this.clone({name, value, op: 'a'});
}
它返回hte headers对象的克隆。您需要将返回的结果存储/分配给变量this.requestHeaders
,否则将无法保存
或者,构造函数os HttpHeaders是:
constructor(headers?: string|{[name: string]: string | string[]})
一个更干净的方法是:
const headerJson = {
'Content-Type': 'application/json',
'Accept' : 'application/json'
}
this.header = new HttpHeaders(headerJson);
header私有变量应该是任何类型的?
header:HttpHeaders
并且还为post方法设置返回类型:post():Observable{…}
,因此Observable是我可以在那里为post()设置的唯一选项@Hacker通过使用any
你失去了严格键入你的响应的能力header私有变量应该是任何类型的?header:HttpHeaders
并且还为你的post方法设置了返回类型:post():observatable{…}
所以observatable是我在那里为post()设置的唯一选项@Hacker通过使用any
您将失去严格键入响应的能力,您将看到我收到的新错误。更新了问题。@Hacker您仍然需要T
语法。如果传入{observe:'response},您将只返回HttpResponse
到选项。如果要传入该参数,则可以传入
到您的post方法this.post.subscribe(…);
只是想知道方法post(url:string,requestData?:any):如何可观察{返回此。(http.post(url,requestData,this.requestHeaders);进行更新以清除问题。}@Hacker我不知道你在问什么。HttpClient方法(get、post、put等)不像旧的Http方法那样返回typeResponse
。相反,它假设正在返回json。这就是为什么要传入所需的响应类型this.post()
。HttpClient将解析响应,并说它属于YourResponse
@Hacker类型,这就是T
发挥作用的地方。它被称为泛型。全局函数应返回可观察的,因此当您传入此.post()
T=MyResponseType
你能看看我收到的新错误吗。更新了问题。@黑客你仍然需要T
语法。如果你传入{observe:'response},你只会返回HttpResponse
到选项。如果要传入该参数,则可以传入
到您的post方法this.post.subscribe(…);
只是想知道方法post(url:string,requestData?:any):如何可观察{返回此。(http.post(url,requestData,this.requestHeaders);进行更新以清除问题。}@Hacker我不知道你在问什么。HttpClient方法(get、post、put等)不像旧的Http方法那样返回typeResponse
。相反,它假设正在返回json。这就是为什么要传入所需的响应类型this.post()
。HttpClient将解析响应,并说它属于YourResponse
@Hacker类型,这就是T
发挥作用的地方。它被称为泛型。全局函数应返回可观察的,因此当您传入此.post()
T=MyResponseType
作为httpClient.get的返回类型,没有可观察的。您可以使用可观察的或可观察的。这是一种http.post方法。它们具有相同的返回类型(甚至它们的重载).Observable不起任何作用。没有Observable
作为httpClient.ge的返回类型