How to import map property of rxjs in angular project , Error : Property 'map' does not exist on type 'Observable<Object>'?
How to import map property of rxjs in angular project , Error : Property 'map' does not exist on type 'Observable<Object>'?
我在 angular 中使用 http post 请求和 rxjs 在服务器上放置数据,但即使在导入 rxjs 的映射 属性 之后,这也会出错。
import { Injectable } from '@angular/core';
import {HttpClient,HttpHeaders,HttpErrorResponse} from '@angular/common/http';
import {throwError } from 'rxjs';
import 'rxjs/add/operator/map';
@Injectable({
providedIn: 'root'
})
export class AuthService {
constructor(private http:HttpClient) { }
registerUser(user){
let headers = new HttpHeaders();
headers.append('content-type','application/json');
return this.http.post('http://localhost:8080/users/register',user,{headers:headers})
.map(response =>response.json())
.catch(this.errorHandler)
}
errorHandler(error:HttpErrorResponse){
return throwError(error.message||"Server not responding");
}
}
我什至像这样导入地图属性:
import {map} from 'rxjs/add/operator';
错误:
Property 'map' does not exist on type 'Observable<Object>'
用户是对象
- 从 RxJS v6 及更高版本开始,不支持直接在
Observable
上调用运算符。相反,使用 Observable.pipe
.
- 从 RxJS v6 及更高版本开始,对直接导入运算符的支持已被弃用。相反,从
rxjs/operators
. 导入
HttpClient
(来自 @angular/common/http
)默认将响应映射为 JSON。不需要 map
运算符(这是 Http
的前行为(来自 @angular/http
))。
请参阅下面的更正示例:
import { /* imports go here */ } from '@angular/common/http';
// ...
// ...
export class AuthService {
// ...
registerUser(user){
let headers = new HttpHeaders();
headers.append('content-type','application/json');
return this.http.post('http://localhost:8080/users/register',user,{headers:headers})
.catch(this.errorHandler);
}
}
如果您使用的是 RXJS 6 或更高版本,则必须管道操作
this.http.post('http://localhost:8080/users/register',user,{headers:headers})
.pipe(map(response => {
// do something with response and return it
})
catchError(this.errorHandler)
);
此外,如果您使用 HttpClient
而不是 Http
,则不需要 response.json()
,因为响应将被反序列化 json.
如果您使用的是 RXJS 6 或更高版本,运算符的用法会发生一些变化。
您通过以下方式导入:
import { map, catchError } from 'rxjs/operators';
您在管道运算符内部使用地图,例如:
return this.http.post('http://localhost:8080/users/register',user,{headers:headers})
.pipe(
map(response => {
// doSomething
}),
catchError(error => {
this.errorHandler(error);
return of(`Caught an error: ${error}`);
})
);
我在 angular 中使用 http post 请求和 rxjs 在服务器上放置数据,但即使在导入 rxjs 的映射 属性 之后,这也会出错。
import { Injectable } from '@angular/core';
import {HttpClient,HttpHeaders,HttpErrorResponse} from '@angular/common/http';
import {throwError } from 'rxjs';
import 'rxjs/add/operator/map';
@Injectable({
providedIn: 'root'
})
export class AuthService {
constructor(private http:HttpClient) { }
registerUser(user){
let headers = new HttpHeaders();
headers.append('content-type','application/json');
return this.http.post('http://localhost:8080/users/register',user,{headers:headers})
.map(response =>response.json())
.catch(this.errorHandler)
}
errorHandler(error:HttpErrorResponse){
return throwError(error.message||"Server not responding");
}
}
我什至像这样导入地图属性:
import {map} from 'rxjs/add/operator';
错误:
Property 'map' does not exist on type 'Observable<Object>'
用户是对象
- 从 RxJS v6 及更高版本开始,不支持直接在
Observable
上调用运算符。相反,使用Observable.pipe
. - 从 RxJS v6 及更高版本开始,对直接导入运算符的支持已被弃用。相反,从
rxjs/operators
. 导入
HttpClient
(来自@angular/common/http
)默认将响应映射为 JSON。不需要map
运算符(这是Http
的前行为(来自@angular/http
))。
请参阅下面的更正示例:
import { /* imports go here */ } from '@angular/common/http';
// ...
// ...
export class AuthService {
// ...
registerUser(user){
let headers = new HttpHeaders();
headers.append('content-type','application/json');
return this.http.post('http://localhost:8080/users/register',user,{headers:headers})
.catch(this.errorHandler);
}
}
如果您使用的是 RXJS 6 或更高版本,则必须管道操作
this.http.post('http://localhost:8080/users/register',user,{headers:headers})
.pipe(map(response => {
// do something with response and return it
})
catchError(this.errorHandler)
);
此外,如果您使用 HttpClient
而不是 Http
,则不需要 response.json()
,因为响应将被反序列化 json.
如果您使用的是 RXJS 6 或更高版本,运算符的用法会发生一些变化。
您通过以下方式导入:
import { map, catchError } from 'rxjs/operators';
您在管道运算符内部使用地图,例如:
return this.http.post('http://localhost:8080/users/register',user,{headers:headers})
.pipe(
map(response => {
// doSomething
}),
catchError(error => {
this.errorHandler(error);
return of(`Caught an error: ${error}`);
})
);