我在收到请求时遇到以下错误。
模块“'node_modules / rxjs / Observable”'没有导出成员'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());
}
}
答案 0 :(得分:2)
您正在使用 Angular 6 而不是Angular 2
您使用已弃用的HttpModule
,您应使用 HttpClientModule 代替
在新的HttpClientModule
中,JSON是假设的默认值,不再需要使用res.json()
来明确解析
在使用HttpClient
之前,您需要将Angular HttpClientModule
导入根模块。
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
将response
作为IEmployee类型返回当我们使用http.get<IEmployee[]>(...)
时,它会返回{的实例{1}}类型。
在您的组件Observable<IEmployee[]>
到subscribe
中获取IEmployee的实例
在您的服务中
Observable<IEmployee[]>
除此之外,RxJS v5.5.2 +已移至 Pipeable operators 以改善树木抖动并更轻松地创建自定义运算符
新导入
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);
}
}
并更改import { map} from 'rxjs/operators';
PS:如果您使用的是.map(...) to .pipe(map(..))
,则不需要
修改后的代码
HttpClientModule
我建议您停止使用 return this._http.get(this._url).pipe(
map((response: Response) => <IEmployee[]>response.json()));
并转到HttpModule
而不是