2017-07-28 35 views
5

我正在嘗試使用與Angular 4.3一起發佈的新HTTP客戶端。我檢查了文檔並使用了HttpParams類,但它似乎沒有工作,或者我做錯了什麼。以下是我有:Angular 4.3中的Http參數

delete(personId: string) { 
    const params = new HttpParams(); 
    params.set('personId', personId); 
    return this.http.delete(`${this.baseUrl}`, { 
     params 
    }); 
    } 

但提出請求時,有在我的網址 沒有查詢參數的任何幫助將不勝感激

回答

9

的PARAMS現在是不可改變所以你有你的時候對其進行設置啓動新的HttpParams,這樣每個set()都會返回一個新實例並應用更改。嘗試

const params = new HttpParams() 
    .set('personId', personId); 

這裏是覆蓋標題和URL參數爲4.3的文檔 - https://angular.io/guide/http#headers


編輯:我想更新我的回答和狀態,你不必一定設置當您啓動HttpParams類時的參數。例如,如果你需要內部的設置參數循環或外的HttpParams初始化的,你可以通過

const params = new HttpParams() 
    .set('personId', personId); 

params = params.set('personName', personName); 

這樣做正如文件中指出:

的HttpHeaders類是不可變的,所以每set()返回一個新實例並應用更改。

+0

是的,我看到現在,謝謝! – ocespedes

1

HttpParams is immutable.

set()創建並返回一個新的HttpParams實例,不變異上set()被稱爲實例。

因此,代碼應該是

const params = new HttpParams().set('personId', personId); 

這裏是一個進一步的事情我使用這個新的HttpParams時掙扎,有時我們則params的n個通過,在那個時候它是有用的有某些函數將參數對象(我們在Angular 4.3之前使用的)轉換爲HttpParams。

我建議作出toHttpParams功能在您常用的服務。因此,您可以調用函數將對象轉換爲HttpParams

/** 
* Convert Object to HttpParams 
* @param {Object} obj 
* @returns {HttpParams} 
*/ 
toHttpParams(obj: Object): HttpParams { 
    return Object.getOwnPropertyNames(obj) 
     .reduce((p, key) => p.set(key, obj[key]), new HttpParams()); 
} 

更新:

自從5.0.0-beta.6(2017年9月3日),他們增加了新的功能(accept object map for HttpClient headers & params

展望未來的對象可以傳遞直接代替HttpParams。

這是,如果你使用了一個共同的功能,像上面提到toHttpParams其他原因,你可以很容易地將其刪除,或者如果需要做改變。