Как извлечь данные из выпадающего списка ng-multiselect в числовом формате вместо массива - PullRequest
0 голосов
/ 24 апреля 2020

Мне нужно отправить объект по почте из angular UI в REST API. В Angular пользовательском интерфейсе я фиксирую транзакцию из выпадающего списка с несколькими выборками, используя компонент ng-multiselect-dropdown . и мой объект сделки класса DealApi выглядит следующим образом:

export class DealApi{
        applicationReceived: any;
        dealid: number;
        expectedReleaseDate: Date;
        plannedRatingCommitteeDate: Date;
        priority: any;
        releaseTimeCriteria: any;
        subsequentRating: any;

}

в app.component. html:

<ng-multiselect-dropdown name="dropdown"
             [placeholder]="'Enter Deal Name or Deal ID'"
             [settings]="dropdownSettings"
             [data]="dropdownList" 
             [(ngModel)]="deal.dealid"
              (onSelect)="onItemSelect($event)"
              (onDeSelect)="onItemSelect($event)"
              (onSelectAll)="onSelectAll($event)"
              (onDeSelectAll)="onDeSelectAll($event)" disabled>
            </ng-multiselect-dropdown>
          </td>

И в app.component.ts:

export class AppComponent implements OnInit {
  title = 'angular-app';
  name = 'angular-app';
  datePickerConfig: Partial<BsDatepickerConfig>;
  dropdownList = [];
  selectedItems: any;
  dropdownSettings:IDropdownSettings;
  dealid : number;
  PlannedRatingCommitteeDate: Date;
  ExpectedReleaseDate: Date;
  ReleaseTimeCriteria: any;
  SubsequentRating: any;
  Priority: any;
  ApplicationReceived: any;
  deal:DealApi= new DealApi();
  constructor(private service:HttpclientService) {}
  ngOnInit(){
  this.dropdownList = [
    {item_id:1, item_text: "Dealname1 (82034890)"},
    {item_id:2, item_text: "Dealname2 (82034890)"},
    {item_id:3, item_text: "Dealname3 (82034890)"},
    {item_id:4, item_text: "Dealname4 (82034890)"}
  ];
  this.selectedItems = [
    {item_id: 2, item_text: "Dealname1 (82034890)"},
      {item_id: 3, item_text: "Dealname2 (82034890)"}
  ];
   this.dropdownSettings = {
     singleSelection: true,
     enableCheckAll:true,
     idField: 'item_id',
     textField: 'item_text',
     selectAllText: 'Select All',
     unSelectAllText: 'UnSelect All',
     itemsShowLimit: 3,
     allowSearchFilter: true
   };

и On Angular UI. Когда я нажимаю кнопку сохранения, он вызывает метод save (), который вызывает getdeals (this.deal), как показано ниже:

this.service.getdeals(this.deal).subscribe((data:any)=>{alert("Deal added successfully.");});

и в httpClient.service.ts , Я вызываю сообщение при передаче объекта сделки:

public getdeals(deal: DealApi)
  {
    const httpOptions = {
      headers: new HttpHeaders({
        'Content-Type':  'application/json',
        'Accept': 'application/json'
      })
    };
  const url = 'http://localhost:8080/deals';
  console.log(deal);
     return this.http.post(url,deal,httpOptions);
}

В ВЫХОДЕ: Я получаю объект сделки как:

{
dealid: [{item_id: 3, item_text: "Dealname3 (82034890)"}]
plannedRatingCommitteeDate: "2020-04-05T04:00:00.000Z"
expectedReleaseDate: "2020-04-19T04:00:00.000Z"
releaseTimeCriteria: "Market open"
subsequentRating: "No"
priority: "High"
applicationReceived: "No"
}

, и выдается ошибка: JSON ошибка разбора: Невозможно десериализовать экземпляр int из токена START_ARRAY; вложенное исключение: com.faster xml .jackson.databind.ex c .MismatchedInputException: невозможно десериализовать экземпляр int из токена START_ARRAY↵ в [Source: (PushbackInputStream)

мне нужен только item_id чтобы быть назначенным на dealid и dealid должен прийти как число вместо массива. Как я могу изменить свой код для этого?

ЛЮБАЯ ПОМОЩЬ БУДЕТ ЦЕНА!

1 Ответ

0 голосов
/ 24 апреля 2020

создайте один параметр в component.ts, например

selected:any;

, затем в html измените модель на эту

<ng-multiselect-dropdown name="dropdown"
             [placeholder]="'Enter Deal Name or Deal ID'"
             [settings]="dropdownSettings"
             [data]="dropdownList" 
             [(ngModel)]="selected"
              (onSelect)="onItemSelect($event)"
              (onDeSelect)="onItemSelect($event)"
              (onSelectAll)="onSelectAll($event)"
              (onDeSelectAll)="onDeSelectAll($event)" disabled>
            </ng-multiselect-dropdown>
          </td>

, затем в функции onItemSelect($event) назначьте свой идентификатор

onItemSelect(event){
  if(this.selected.length>0){
    this.deal.dealid=this.selected[0].id;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...