1. 程式人生 > >Angular 4 到 Angular6 http請求的變化

Angular 4 到 Angular6 http請求的變化

以下純屬個人學習中遇到的問題以及解決後的感悟,歡迎指點錯誤:

在Angular4 中 ,要用使用http請求伺服器資料,應該在constructor中匯入Http模組 , 如: constructor(private http: Http){},

在使用時,使用this.http.get(url).map(res => res.json());即可,其中map 源於 'rxjs/Rx'響應式模組中;

import { Injectable } from '@angular/core';
import {Http} from '@angular/http';
import {Observable} from 'rxjs';
import 'rxjs/Rx';

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

  constructor(private http: Http) { }

  getProduct() {
      return this.http.get(`/api/product`).map(res => res.json());
  }
}

 

但在Angular6中, 要用使用http請求伺服器資料,應該在constructor中匯入HttpClient模組,因為Http模組在Angular6中已過時;後面若依舊按照如上方式編寫,則會出現如下錯誤:

rxjs/Rx報錯

rongw

rxjs/Rx冒紅可以在tslint.json檔案中,Ctrl+F 搜尋rxjs/Rx,然後將true改成false, 但是依舊map方法依舊報錯,可能map方法不在rxjs/Rx中了吧; 後來查詢得知,map方法存在於 'rxjs/operators'; 故引入即可;在Angular6中,map方法要放在pipe()中處理才不會報錯;

修改過後如下:

import { Injectable } from '@angular/core';
import {HttpClient} from '@angular/common/http';
import {Observable} from 'rxjs';
import {map} from 'rxjs/operators';

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

  constructor(private http: HttpClient) { }

  getProducts(): Observable<Product[]>{
    return this.http.get(`/api/product`).pipe(map(res => res.json()));
  }

}