Angular 4 到 Angular6 http請求的變化
阿新 • • 發佈:2019-01-11
以下純屬個人學習中遇到的問題以及解決後的感悟,歡迎指點錯誤:
在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冒紅可以在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())); } }