2017-07-28 38 views
5

Tôi đang cố gắng sử dụng ứng dụng khách http mới xuất hiện với Angular 4.3. Tôi đã kiểm tra tài liệu và sử dụng lớp học HttpParams nhưng có vẻ như không hoạt động hoặc tôi đang làm điều gì đó sai. Dưới đây là những gì tôi có:Http params trong Angular 4.3

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

Nhưng khi đưa ra yêu cầu không có params truy vấn trong url của tôi Bất kỳ trợ giúp sẽ được đánh giá

Trả lời

9

Các params nay là không thay đổi vì vậy bạn phải cài đặt chúng khi bạn khởi tạo HttpParams mới để mỗi tập() trả về một cá thể mới và áp dụng các thay đổi. Hãy thử

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

Dưới đây là các tài liệu đó bao gồm tiêu đề và các thông số url 4,3 - https://angular.io/guide/http#headers


Edit: tôi muốn cập nhật câu trả lời và tiểu bang của tôi mà bạn không cần phải thiết lập các tham số khi bạn khởi tạo lớp HttpParams. Ví dụ, nếu bạn cần phải thiết lập các thông số trong một vòng lặp for hoặc bên ngoài của HttpParams khởi tạo nào bạn có thể làm như vậy bằng cách

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

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

Như đã trình bày bởi các tài liệu:

Lớp HttpHeaders là không thay đổi, vì vậy mỗi set() trả về một cá thể mới và áp dụng các thay đổi.

+0

Vâng tôi thấy rằng bây giờ, Cảm ơn! – ocespedes

1

HttpParams is immutable.

set() tạo và trả về một trường hợp mới HttpParams, mà không biến đổi các ví dụ mà set() được gọi.

Vì vậy, các mã nên được

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

Dưới đây là một chuyện nữa tôi phải vật lộn với khi sử dụng HttpParams mới này, đôi khi chúng ta có số n của params để vượt qua, tại thời điểm đó nó rất hữu ích có một số chức năng chuyển đổi đối tượng tham số (mà chúng tôi đã sử dụng trước Angular 4.3) cho HttpParams.

Tôi đề nghị làm toHttpParams chức năng trong dịch vụ của bạn thường được sử dụng. Vì vậy, bạn có thể gọi hàm để chuyển đổi đối tượng thành 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()); 
} 

Cập nhật:

Kể từ 5.0.0-beta.6 (2017/09/03) họ thêm tính năng mới (accept object map for HttpClient headers & params)

Trong tương lai các đối tượng có thể được thông qua trực tiếp thay vì HttpParams.

Đây là lý do khác nếu bạn đã sử dụng một chức năng phổ biến như toHttpParams đề cập ở trên, bạn có thể dễ dàng loại bỏ nó hoặc làm thay đổi nếu cần thiết.

Các vấn đề liên quan