2017-06-14 80 views
0

我使用http observable獲取數據。加載數據並等待響應時,我想禁用提交按鈕。Angular 2 - http - Observable - 啓動/停止/運行狀態

當前我已經在每個組件/表單上實現了狀態碼,以便在調用subscribe方法之前將狀態設置爲正在運行,並且如果響應存在,則禁用運行標誌。

問題是我必須對每個組件/表單執行此檢查。我想用一個模型將observable包裝起來,在請求發出前設置狀態信息。

什麼是最好的方法?在發出請求之前,我沒有找到解決方案來添加函數。 Observable之前沒有功能。我也嘗試連接兩個Observables。第一個僅用於表示第二個Observable正在啓動。

有沒有一種簡單的方法來以抽象的方式來聆聽observable的開始。我想換HTTP服務,以保持(啓動/停止/運行/ ...)指出...

編輯1:

這裏是什麼即時通訊目前正在做一些僞代碼。我在每個由按鈕觸發的observable上添加了這個狀態持有者。我想刪除這個重複的代碼。

this.mystateHolder.start(); // sets running;error,success to false 
this.myservice.updateSomething(mydata).subscibe(
    ok => mysateHolder.stop(false) // sets success to true and running to false 
    error => mystateHOlder.stop(true, error) // sets error to true and running to false 
) 
<button [disabeld]="mystateHolder.isRunning()"></button> 
<span *ngIf="mystateHolder.hasErrors()">mystateHolder.getErrorMessage()</span> 

目標僞代碼(也許):

const state = this.myservice.updateSomething(mydata).state() 
state.subscribe(); 
console.log(state.hasErrors()) 
console.log(state.isRunning()) 
console.log(state.success()) 

回答

0

一件事你可以做的是讓你去期望的狀態之前,你需要的電話。這可以在您使用resolve參數的路由器中完成。 (https://angular.io/api/router/Resolve如果您使用角度路由器,UI路由器也提供這一點)。 我能想到的另一件事是隻檢查數據是按鈕的標籤與[關閉]屬性一樣,可供選擇:

<button [disable]="data === null">Submit</button> 

或其他一些檢查以適合你的問題。

+0

我已更新我的示例(編輯1)。如果我檢查數據,那麼它也是另一種狀態檢查。如果沒有數據返回會怎麼樣?我必須一次又一次地對所有特定用例的每個可觀察對象執行操作,但每次都是一樣的。 – meleagros