RsJX 'Map' 运算符在 Angular 6 中不起作用

RsJX 'Map' operator is not working in Angular 6

我正在尝试使用 RxJS 中的 map 运算符,但它抛出了一个错误

Property 'map' does not exist on type 'Observable'.

这是代码

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

    export class DataService {
     constructor(public http: Http) {}

     getData() {
       return this.http
        .get("https://jsonplaceholder.typicode.com/users")
        .map(res => res.json());
      }
    }

首先 Http 在高于 Angular 4 的版本中被弃用。您需要使用 HttpClient"@angular/common/http" 中的 HttpClientModule 来代替它。使用 HttpClient 您将获得 JSON 解析结果,因此您不需要 res.json() 更长的时间。

因为 RxJS 的新版本中的第二个 map 正在以另一种方式使用。它现在可以通过管道传输,您需要将它与 pipe.

结合使用
import { Injectable } from "@angular/core";
import { HttpClient} from "@angular/common/http";

@Injectable()    
export class DataService {
  constructor(public httpClient: HttpClient) {}

  getData() {
    return this.httpClient
               .get("https://jsonplaceholder.typicode.com/users")
  }
}

使用 map 运算符

import { map } from 'rxjs/operators';

...

someFunction() {
   this.httpClient.get("https://jsonplaceholder.typicode.com/users")
                  .pipe(map(res) => something with res);
}

...
import { Injectable } from "@angular/core";
import { map } from 'rxjs/operators';
import { HttpClient } from '@angular/common/http';
@Injectable()

export class DataService {
 constructor(private http: HttpClient) {}

 getData() {
   return this.http
    .get("https://jsonplaceholder.typicode.com/users")
    .map(res => res.json());
  }
}

在 RXJS 6 中 import { map } from 'rxjs/operators';

import { map } from 'rxjs/operators';
getData() {
   return this.http.get("https://jsonplaceholder.typicode.com/users")
   .pipe(
        map(res => res.json())
    );
}