如何获取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
相关产品推荐
相关产品推荐

