我在发出 get 请求时收到以下错误。
模块"'node_modules/rxjs/Observable"'没有导出的成员'Observable'。 属性"map"在类型"可观察"上不存在。
我已经尝试了StackOverflow中提供的所有可能的解决方案,但它对我不起作用。
法典:
import { Injectable } from '@angular/core';
import { IEmployee } from './employee';
import { Http, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
@Injectable()
export class EmployeeService {
private _url : string = 'apiData/employeedata.json'
constructor(private _http: Http) { }
getEmployees(): Observable<IEmployee[]> {
return this._http.get(this._url)
.map((response: Response) => <IEmployee[]>response.json());
}
}
您使用的是 Angular6而不是 Angular 2
您正在使用已弃用的HttpModule
您应该改
用HttpClientModule在新HttpClientModule
中,JSON 是假定的默认值,不再需要使用res.json()
显式解析 在使用HttpClient
之前,您需要将 AngularHttpClientModule
导入根模块。
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HttpClientModule } from '@angular/common/http';
@NgModule({
imports: [
BrowserModule,
HttpClientModule,
],
//.......
您可以HttpClient
告诉响应的类型,以使输出的使用更轻松、更明显。
可以使用类型参数对响应进行类型检查
Http
返回一个observable
,我们可以告诉HttpClient.get
以 IEmployee 类型返回response
当我们使用http.get<IEmployee[]>(...)
时,它会返回Observable<IEmployee[]>
类型的实例。
在您的组件中subscribe
Observable<IEmployee[]>
以获取 IEmployee
的实例
在您的服务
import { Injectable } from '@angular/core';
import { IEmployee } from './employee';
import { HttpClient} from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class EmployeeService {
private _url : string = 'apiData/employeedata.json'
constructor(private _http: HttpClient) { }
getEmployees(): Observable<IEmployee[]> {
return this._http.get<IEmployee[]>(this._url);
}
}
除此之外,RxJS v5.5.2+已移至管道运算符,以改善树木摇动并更轻松地创建自定义运算符
新导入
import { map} from 'rxjs/operators';
并更改.map(...) to .pipe(map(..))
PS:如果您使用的是修改HttpClientModule
代码,则不需要
return this._http.get(this._url).pipe(
map((response: Response) => <IEmployee[]>response.json()));
我建议您停止使用HttpModule
,而是选择HttpClientModule