Open hsiaofung opened 4 years ago
步驟
進階HTTP:
我們可以選擇觀察 :
回應型別
大多數的情況你只需要觀察body(預設值),和使用json回應型別的預設值。有5%狀況需要其他選項存取其他東西。新的HttpClient給你操作API的彈性。且在大部分的狀況下容易使用。
攔截程序 :
轉換發出的請求,並在傳遞回應前傾聽與轉換。
HttpRequest
HttpHandler
攔截程序鏈
攔截程序必須在app module 中加入provider
進階可觀察:
輸入並搜尋通常很難,因為:
攔截程序和進階可觀察都是從chapter-9/simple-http改來的。
實際上有兩個呼叫要取得股票清單。
Angular 的可觀察預設為冷。因此每次有人訂閱時,可觀察就被觸發。此例中,我們有兩個訂閱者,它們是Async管道,一個是ngFor而另一個是length。因此,相較於使用同一個可觀察,我們最終發出兩個不同的呼叫。
Angular 的可觀察預設為冷可觀察。這是什麼意思? 基本上,可觀察只是連接生產方與消費者的函式。
要如何解決?
Angular 的可觀察預設為冷可觀察。這是什麼意思? 基本上,可觀察只是連接生產方與消費者的函式。
Subject : Subject在RxJS是特殊型別,它同時做為觀察者與可觀察。也就是說它能夠發出事件並訂閱事件。
debounceTime(500) : 要求串流暫停直到500毫秒內都沒有新事件。如此能確保我們在使用者停止打字半秒後才發出呼叫。
distinctUntilChanged() : 確保事件只會在值與之前不同時發出(例如 : 使用者輸入搜尋條件test,然後輸入更多字元接著刪除回到原來開始的字)
switchMap : 將可觀察鏈從一個型別轉換成另一個型別,還能取消舊的訂閱。這能解決未依序的回應問題。
使用startWith 可觀察鏈觸發的初始值。確保網頁載入時我們會看到原始的股票清單。
使用四個RxJS運算子鏈,我們可以執行應用程式。在搜尋欄未輸入時,它會等你停止打字一段時間後才發出請求。若輸入並刪除回到開始的值,它完全不會發出請求。
總結: