2017-10-10 58 views
0

我面臨這種情況:Angular2中的Http數據表:如何處理修改?

我有一個前端調用REST端點來獲取一些數據並在一個表中顯示數據。

對於前端,我正在使用TypeScript中的Material Design設計Angular2。

我有一個在開發前端時提供假數據的服務,現在我將它轉換爲使用角度Http服務,從實際後端獲取數據。

這是一個例子有點像我使用的服務:

@Injectable() 
export class ExampleService{ 
    getData(): Observable<DataType>{ ... } 
    doStuffOnData(): Observable<boolean>{ ... } 
} 

現在,getData()結果被直接噴射到它被饋送到一個MatTable,這樣,當我僞造的一個DataSource後端,我可以返回BehaviourSubject並在修改數據的每個操作上使用next

現在我正在使用後端,我做的第一件事就是直接將http.get的Observable結果發送到表中,並且這可行,但我不知道如何處理修改。

兩種可能性來我的腦海:

  1. 發送一條新GET請求的每篇文章之後檢索服務器端更新的數據
  2. 緩存在服務中的數據,並手動修改後,每個成功的請求製作。

還有別的嗎?比方說,我想發送一個新的GET,我可以以某種方式獲得我可以多次發送的「recurringGET」,並且它始終在相同的可觀察值上給出結果?喜歡的東西:

@Injectable() 
export class ExampleService{ 
    getData(): Observable<DataType>{ return http.recurringGET(); } 
    doStuffOnData(): Observable<boolean>{ http.reissueGET(); } 
} 

我也完全控制後端,因此,如果一個聰明的解決方案需要改變調用的返回,是可以做到的。後端是原始的PHP(是的,痛苦的,但唯一可能的解決方案給予我的託管)

+0

你提到的(重複性GET)被稱爲長輪詢(https://stackoverflow.com/questions/333664/how-do-i-implement-basic-long-polling)。但我不知道這是否仍然使用。更好的方法是使用websockets。 –

+0

你能詳細點嗎? websocket如何適應這種情況? – bracco23

+0

使用websockets,您可以創建一個「響應式」流程:而不是前端請求數據的每X秒(然後可能大多數時間響應不會有新數據),後端將負責發送/通過套接字將數據推送到前端(也就是說,簡單來說,這兩層之間的「開放網關」)。 –

回答

0

你應該看看rxjs Subject。 你可以做的是在你的服務中存儲一個privat dataSubject,並向其發送獲取/發佈數據。例如。

import { Subject, Observable } from "rxjs"; 
import 'rxjs/add/operator/catch';  

@Injectable() 
export class ExampleService{ 
private _dataSubject = new Subject() 
    constructor(){ 
     // get initial data 
     someHttpCall() 
      .map(data => this._dataSubject.next(data.json())) 
      .catch(err => this._dataSubject.error(err.json())) 
    } 

    getData(): Observable<DataType>{ return this._dataSubject; } 
    doStuffOnData(): void{ 
     someHttpCall() 
      .map(data => this._dataSubject.next(data.json())) 
      .catch(err => this._dataSubject.error(err.json())) 
    } 
} 

然後在你的組件,你只需要訂閱ExampleService.getData(),當你調用doStuffonData,將數據發射到_dataSubject和以前的訂閱將接收到的數據。

+0

我想這是假設POST調用回顯我修改過的數據。現在它沒有,它給了我一個布爾值(成功/不成功)。我應該改變API嗎?其他REST API中的常見行爲是什麼? – bracco23

+0

是的,好吧,我不能回答這個問題,但我個人的經驗告訴我,返回發佈的對象比返回布爾值更有用。但是你選擇最適合你的應用的東西。 – Andresson

+1

擡起頭,是的,根據REST原則返回對象的狀態確實是最好的事情,所以做到了這一點,並實現了您的解決方案。工作正常。 – bracco23