You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Formly表单中选中选项的label属性

解决Formly Select同时获取Value和Label的问题

你遇到的问题核心是:因为设置了valueProp: 'supplierCode',Formly会把选中的supplierCode单独存在你的model(vm.InwardLeaseModel.supplier)里,而不是整个供应商对象,所以直接访问supplierName肯定拿不到。另外你代码里的vm.InwardLeaseFields.supplier是错误的——InwardLeaseFields是数组结构,字段嵌套在fieldGroup里,不能直接这样访问。

下面给你两种可行的解决方案:

方案一:通过选项数组匹配获取Label(保留valueProp设置)

如果需要在model里只存储supplierCode,同时要拿到对应的supplierName,可以在onChange函数里通过当前选中的value去options数组里匹配对应的选项:

vm.InwardLeaseFields = [
  {
    className: 'row',
    fieldGroup: [
      {
        className: 'col-xs-3',
        key: 'supplier',
        type: 'select',
        templateOptions: {
          options: [],
          valueProp: 'supplierCode',
          labelProp: 'supplierName',
          required: false,
          onChange: function(selectedValue) {
            // 从选项数组中找到对应的供应商对象
            const selectedSupplier = this.options.find(opt => opt.supplierCode === selectedValue);
            if (selectedSupplier) {
              console.log('选中的Value(supplierCode):', selectedValue);
              console.log('选中的Label(supplierName):', selectedSupplier.supplierName);
            }
          }
        }
      }
    ]
  }
];

这里的this在onChange函数里指向当前字段的templateOptions,所以可以直接获取options数组。

方案二:让Model存储整个供应商对象(取消valueProp限制)

如果不介意model里存储整个供应商对象,而不是单独的supplierCode,可以去掉valueProp配置(或者设置为null),这样Formly会把选中的整个对象存在vm.InwardLeaseModel.supplier里,你就能直接访问supplierCode和supplierName了:

vm.InwardLeaseFields = [
  {
    className: 'row',
    fieldGroup: [
      {
        className: 'col-xs-3',
        key: 'supplier',
        type: 'select',
        templateOptions: {
          options: [],
          // 去掉valueProp,默认存储整个选项对象
          labelProp: 'supplierName',
          required: false,
          onChange: function() {
            console.log('选中的Value(supplierCode):', vm.InwardLeaseModel.supplier.supplierCode);
            console.log('选中的Label(supplierName):', vm.InwardLeaseModel.supplier.supplierName);
          }
        }
      }
    ]
  }
];

这种方法更简单,但要注意如果后端接口只需要supplierCode,你在提交表单的时候需要从对象里提取这个值再发送。

内容的提问来源于stack exchange,提问作者LazioTibijczyk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:45:39