首页 文章

动态设置HttpParams()体

提问于
浏览
0

在Angular 5 HttpClient中,我可以用这种方式设置HttpParams() .

const body = new HttpParams().set('email', 'test@mail.com').set('password', 'pass');

但是当我尝试以这种方式设置HttpParams()时 . 值未设置 .

let paramsMap = new Map<any,any>();
    paramsMap.set('email','test@mail.com');
    paramsMap.set('password','pass');    

    paramsMap.forEach((value: any, key: any) => {
      body.set(key, value);
    });

为什么没有设定?我怎么能以类似的方式做到这一点?

1 回答

  • 0

    API略有不同,通过这种方式,您可以在查询字符串中发送带有params的动态请求

    let paramsMap = new Map<any,any>();
    paramsMap.set('username','admin');
    paramsMap.set('password','admin');
    
    let params = new HttpParams();
    paramsMap.forEach((value: any, key: any) => {
      params = params.set(key, value);
    });
    
    return this.http.request<any>('post', this.url + LOGIN_URL, { 'params': params});
    

    如果您检查HttpClient方法,您可以看到它是如何工作的 .

    Answer to first comment:

    HttpParams它不是不可变的,它用于将params传递给查询字符串 . 所以你需要的是:

    let paramsMap = new Map<any,any>();
    paramsMap.set('email','test@mail.com');
    paramsMap.set('password','pass');   
    
    return this.http.post<any>(this.url + LOGIN_URL, mapToObject(paramsMap));
    
    /**
     * recursive function that receive a Map and returns a JSON object
     * @param map
     * @returns {any}
     */
    function mapToObject(map) {
      const out = Object.create(null)
      map.forEach((value, key) => {
        if (value instanceof Map) {
          out[key] = mapToObject(value)
        }
        else {
          out[key] = value
        }
      });
      return out
    }
    

相关问题