我试图从Angular调用一个API,但得到这个错误:

属性“map”在类型“Observable<Response>”上不存在

这个类似问题的答案并没有解决我的问题:Angular 2 beta版。17:属性“map”在类型“Observable<Response>”上不存在。

我使用的是Angular 2.0.0-beta.17。


当前回答

只需安装rxjs-compat就可以解决这个问题

npm i rxjs-compat --save-dev

然后像下面这样导入它

import 'rxjs/Rx';

其他回答

  import { Injectable } from '@angular/core';
  import { Http } from '@angular/http';
  import 'rxjs/add/operator/map';

  @Injectable({
  providedIn: 'root'
  })
  export class RestfulService {

  constructor(public http: Http) { }

 //access apis Get Request 
 getUsers() {
 return this.http.get('http://jsonplaceholder.typicode.com/users')
  .map(res => res.json());
  }

 }

执行命令

 npm install rxjs-compat 

我只需要导入

 import 'rxjs/add/operator/map';

重新启动vs代码,问题解决。

我有同样的问题,我解决它如下

import { map } from 'rxjs/operators'; // imports statement 

return this.auth.user$.pipe(
  map(user =>{
    if(user) return true;
        this.router.navigate(['/login'], { queryParams: {returnUrl :state.url}});
    return false;
  }));
}

有一个问题,可观察类型是空的,所以我添加类型任何,它有助于清除许多错误

user$: Observable<firebase.User | any>;

如果你使用这个旧的方法来获取路由参数

 this._route.params
        .map(params => params['id'])

为新的rxjs版本更新它

首先, 从RXJS操作符中导入映射。

import { map } from 'rxjs/operators';

第二个添加管道,

   this._route.params.pipe(
            map(params => params['id']))
import { map } from "rxjs/operators";

getGetFunction(){
this.http.get('http://someapi')
.pipe(map(res => res));
}

getPostFunction(yourPara){
this.http.get('http://someapi',yourPara)
.pipe(map(res => res));
}

在上面的函数中,你可以看到我没有使用res.json(),因为我使用HttpClient。它自动应用res.json()并返回Observable (HttpResponse < string>)。在HttpClient中使用angular 4之后,你不再需要自己调用这个函数。

首先运行安装,如下所示:

npm install --save rxjs-compat@6

现在你需要在service.ts中导入rxjs:

import 'rxjs/Rx'; 

瞧!问题已经解决了。