13

我在表单控件中有一些类别,我将它们发送到一个字符串数组中,如下所示:

[1,4,6]

那是我的实际代码:

let categoryIds = new Array<String>()
this.selectedCategories.forEach((value: string, key: string) =>
  categoryIds.push(key))

let requestOptions = {
    params: new HttpParams()
        .set('title', this.createNewForm.controls['title'].value)
        .append('content', this.createNewForm.controls['content'].value)
        .append('categoryids', categoryIds.toString()),              
    withCredentials: true
}

但是我想将它们作为对象数组发送,使用旧版本的 angular Http 我能够对对象进行 foreach 并附加每个类别。但我不知道如何获取每个类别并将每个类别都附加到参数。我需要这样:

...categoryId=1&categoryId=4&categoryId=6...

4

3 回答 3

28

您可以使用.append将值附加到参数并在处理值数组时为您提供所需的结果。.set用于设置或替换参数的值。所以你真的应该做一些更像下面的事情:

let httpParams = new HttpParams()
  .set('title', this.createNewForm.controls['title'].value)
  .set('content', this.createNewForm.controls['content'].value);

categoryIds.forEach(id => {
  httpParams = httpParams.append('categoryId', id);
});

const requestOptions = {
  params: httpParams,
  withCredentials: true
};

这并不明显,但该.append方法不会改变HttpParams调用它的对象,而是返回一个新对象。这就是我们httpParams在上面的示例中重新分配的原因。此外,.append可以在不先使用.set设置参数的情况下调用。

于 2017-11-07T18:07:16.073 回答
12

fromObject您可以创建包含所有参数的对象,HttpParamOptons并在创建时将此对象传递给HttpParams

let data={
   firstname:'xyz',
   lastname:'pqr'
}

let body=new HttpParams({fromObject:data})

this.http.post(URL, body, this.header).subscribe(data => {
 ....
}, error => {
 ....
})
于 2018-05-09T05:29:14.220 回答
1

可能这就是你要找的

组件文件:

import { Component } from '@angular/core';
import { HttpParams } from '@angular/common/http';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})

export class AppComponent {

data = [
       {id:'_', title:'_', content:'_'},
       ....,
       ....
       ];

mainArr:any = [];

constructor(){}

getCategory(item){
    this.mainArr.push({title:item.title,content:item.content,categoryId:item.id});

   console.log('mainArr',this.mainArr);

   let requestOptions = {
        params: new HttpParams()
        .append('data', this.mainArr),
        withCredentials: true
    }

   console.log('requestOptions',requestOptions);
  }
}
于 2017-10-16T07:41:14.030 回答