angular - कोणीय 4.3-HttpClient सेट परमेस




angular-http (8)

आसान विकल्प के युगल

HttpParams ऑब्जेक्ट्स का उपयोग HttpParams बिना

let body = {
   params : {
    'email' : emailId,
    'password' : password
   }
}

this.http.post(url, body);

HttpParams ऑब्जेक्ट का उपयोग करना

let body = new HttpParams({
  fromObject : {
    'email' : emailId,
    'password' : password
  }
})

this.http.post(url, body);
let httpParams = new HttpParams().set('aaa', '111');
httpParams.set('bbb', '222');

यह काम क्यों नहीं करता है? इसने केवल 'आआ' और न कि 'बब्ब' सेट किया

इसके अलावा, मेरे पास एक ऑब्जेक्ट {aaa: 111, bbb: 222} है, मैं बिना लूपिंग के सभी मान कैसे सेट कर सकता हूं?

अद्यतन (यह काम करने लगता है, लेकिन लूप से कैसे बचा जा सकता है?)

let httpParams = new HttpParams();
Object.keys(data).forEach(function (key) {
     httpParams = httpParams.append(key, data[key]);
});

5.0.0-बीटा 6 से पहले

let httpParams = new HttpParams();
Object.keys(data).forEach(function (key) {
     httpParams = httpParams.append(key, data[key]);
});

5.0.0-beta.6 के बाद से

5.0.0-beta.6 (2017-09-03) के बाद से उन्होंने नई सुविधा जोड़ी (HttpClient हेडर और परम के लिए ऑब्जेक्ट मैप स्वीकार करें)

आगे जाकर वस्तु को HttpParams के बजाय सीधे पास किया जा सकता है।

getCountries(data: any) {
    // We don't need any more these lines
    // let httpParams = new HttpParams();
    // Object.keys(data).forEach(function (key) {
    //     httpParams = httpParams.append(key, data[key]);
    // });

    return this.httpClient.get("/api/countries", {params: data})
}

इसके इस्तेमाल से आप लूप से बच सकते हैं।

// obj is the params object with key-value pair. 
// This is how you convert that to HttpParams and pass this to GET API. 

const params = Object.getOwnPropertyNames(obj)
               .reduce((p, key) => p.set(key, obj[key]), new 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-09-03) के बाद से उन्होंने नई सुविधा जोड़ी ( HttpClient हेडर और परम के लिए ऑब्जेक्ट मैप स्वीकार करें )

आगे जाकर वस्तु को HttpParams के बजाय सीधे पास किया जा सकता है।

यह दूसरा कारण है यदि आपने ऊपर उल्लिखित किसी भी सामान्य फ़ंक्शन जैसे कि HttpParams का उपयोग किया है, तो आप इसे आसानी से हटा सकते हैं या आवश्यकता के अनुसार परिवर्तन कर सकते हैं।


एक अन्य विकल्प यह है:

this.httpClient.get('path', {
    params: Object.entries(data).reduce(
    (params, [key, value]) => params.set(key, value), new HttpParams());
});

चूंकि HTTP Params वर्ग अपरिवर्तनीय है, इसलिए आपको सेट विधि की श्रृंखला बनाने की आवश्यकता है:

const params = new HttpParams()
.set('aaa', '111')
.set('bbb', "222");

जहां तक ​​मैं इसे https://github.com/angular/angular/blob/master/packages/common/http/src/params.ts पर कार्यान्वयन से देख सकता हूं

आपको अलग से मान प्रदान करने होंगे - आप अपने पाश से बचने में सक्षम नहीं हैं।

एक कंस्ट्रक्टर भी है जो एक स्ट्रिंग को एक पैरामीटर के रूप में लेता है, लेकिन यह रूप में है param=value&param2=value2 इसलिए आपके लिए कोई सौदा नहीं है (दोनों ही मामलों में आप अपनी वस्तु को लूप करने के साथ समाप्त करेंगे)।

आप हमेशा एक मुद्दे / सुविधा अनुरोध को कोणीय की रिपोर्ट कर सकते हैं, जो मैं दृढ़ता से सलाह देता हूं: https://github.com/angular/angular/issues

पुनश्च: set और append तरीकों के बीच अंतर के बारे में याद रखें;)


मेरे लिए, set तरीकों का सबसे साफ तरीका है

const params = new HttpParams()
.set('aaa', '111')
.set('bbb', "222");

यह समाधान मेरे लिए काम कर रहा है,

let params = new HttpParams(); Object.keys(data).forEach(p => { params = params.append(p.toString(), data[p].toString()); });





angular-http