Angular 如何将Priming下拉选择值设置为对象的id而不是整个对象的id

Angular 如何将Priming下拉选择值设置为对象的id而不是整个对象的id,angular,primeng,Angular,Primeng,我正在将一个集合绑定到prime NG下拉列表 <p-dropdown [options]="statusTypes" formControlName="StatusTypeCode" optionLabel="Name"> </p-dropdown> 但是我必须在每一个下拉列表中都这样做 HTML中有没有办法只指定下拉列表的值等于一个属性(例如:optionValue=“StatusTypeCode”),这样我就可以用id而不是整个对象填充表单?我无法使用默认的启动下

我正在将一个集合绑定到prime NG下拉列表

<p-dropdown [options]="statusTypes" formControlName="StatusTypeCode" optionLabel="Name">
</p-dropdown>
但是我必须在每一个下拉列表中都这样做


HTML中有没有办法只指定下拉列表的值等于一个属性(例如:optionValue=“StatusTypeCode”),这样我就可以用id而不是整个对象填充表单?

我无法使用默认的启动下拉组件设置值。为了保持干燥,我创建了一个助手服务,它基于集合创建数组

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class HelperService {

  constructor() { }

  getDropdownValuesFromArray(collectionArray : any[]): any[] {
    let typeArray: any[] = [];
    for(let i = 0; i< collectionArray.length; i++) {
      typeArray.push({});
      typeArray[i].label = collectionArray[i].Name;
      typeArray[i].value = collectionArray[i].Code;
    }
    return typeArray;
  }
}

从'@angular/core'导入{Injectable};
@注射的({
providedIn:'根'
})
导出类帮助服务{
构造函数(){}
getDropdownValuesFromArray(collectionArray:any[]):any[]{
let typeArray:any[]=[];
for(设i=0;i

看起来像是Priming的疏忽,希望他们能加上它。

不幸的是,你不能改变Priming下拉菜单使用值的方式,默认情况下,下拉菜单使用对象数组中的整个对象;Priming仅允许通过optionLabel属性更改标签。这是因为所有Priming组件都使用它的api SelectItem。对于您的问题,您可以做的是从自定义数组创建另一个数组,就像您在描述中所做的那样


目前还没有自定义值的选项。如果您的场景不打算使用迭代生成的多个下拉列表,我建议您继续使用ngModel中的整个对象。

我不知道他们何时更新了此下拉列表,但在Priming文档中,下拉列表具有“optionValue”属性,可以解决此问题。我有一个SMILAR问题,我想从数组中选择id的对象,这就是我得到的

<p-dropdown id="dropdown" inputId="dropdown" optionValue="id" [autoDisplayFirst]="false" [options]="cities" formControlName="id" optionLabel="name"></p-dropdown>


现在,它将选择
{id:'1'}
而不是
{id:'1',name:'cityName'}

启动本身并没有提供一种方法来完成您的要求。但是,通过实现
ControlValueAccessor
<p-dropdown id="dropdown" inputId="dropdown" optionValue="id" [autoDisplayFirst]="false" [options]="cities" formControlName="id" optionLabel="name"></p-dropdown>