我试图从Angular调用一个API,但得到这个错误:
属性“map”在类型“Observable<Response>”上不存在
这个类似问题的答案并没有解决我的问题:Angular 2 beta版。17:属性“map”在类型“Observable<Response>”上不存在。
我使用的是Angular 2.0.0-beta.17。
我试图从Angular调用一个API,但得到这个错误:
属性“map”在类型“Observable<Response>”上不存在
这个类似问题的答案并没有解决我的问题:Angular 2 beta版。17:属性“map”在类型“Observable<Response>”上不存在。
我使用的是Angular 2.0.0-beta.17。
当前回答
如果你使用这个旧的方法来获取路由参数
this._route.params
.map(params => params['id'])
为新的rxjs版本更新它
首先, 从RXJS操作符中导入映射。
import { map } from 'rxjs/operators';
第二个添加管道,
this._route.params.pipe(
map(params => params['id']))
其他回答
在angular的新版本的httpClient模块中,你还没有这样写:
return this.http.request(request)
.map((res: Response) => res.json());
但你可以这样做:
return this.http.request(request)
.pipe(
map((res: any) => res.json())
);
在我的情况下,只包括地图和承诺是不够的:
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/toPromise';
我按照官方文档的建议导入了几个rxjs组件,解决了这个问题:
1)在一个app/rxjs-operators中导入语句。ts文件:
// import 'rxjs/Rx'; // adds ALL RxJS statics & operators to Observable
// See node_module/rxjs/Rxjs.js
// Import just the rxjs statics and operators we need for THIS app.
// Statics
import 'rxjs/add/observable/throw';
// Operators
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/debounceTime';
import 'rxjs/add/operator/distinctUntilChanged';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/switchMap';
import 'rxjs/add/operator/toPromise';
2)在你的服务中导入rxjs-operator本身:
// Add the RxJS Observable operators we need in this app.
import './rxjs-operators';
我也有同样的问题,我使用的是Visual studio 2015,它有一个旧版本的typescript。
升级扩展后,问题得到解决。
下载链接
你需要导入map操作符:
import 'rxjs/add/operator/map'
或者更一般地说:
import 'rxjs/Rx';
注意:对于RxJS 6.x版本。X和以上,你将必须使用可管道的操作符,如下面的代码片段所示:
import { map } from 'rxjs/operators';
import { HttpClient } from '@angular/common/http';
// ...
export class MyComponent {
constructor(private http: HttpClient) { }
getItems() {
this.http.get('https://example.com/api/items').pipe(map(data => {})).subscribe(result => {
console.log(result);
});
}
}
这是由于RxJS团队删除了对使用的支持 更多信息请参见RxJS更新日志中的重大更改。
更新日志如下:
operator:可管道操作符现在必须像这样从rxjs中导入:import {map, filter, switchMap} from 'rxjs/operators';没有深度进口。
我也曾犯过同样的错误。一个对我有效的解决方案是在您的服务中添加以下行。Ts文件而不是导入'rxjs/add/operator/map':
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
举个例子,我的app。service。ts在调试之后,
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
@Injectable()
export class AppService {
constructor(private http: HttpClient) {}
getData(): Observable<any> {
return this.http.get('https://samples.openweathermap.org/data/2.5/history/city?q=Warren,OH&appid=b6907d289e10d714a6e88b30761fae22')
.pipe(map(result => result));
}
}