vben: 关于表单组件 InputNumber 无法使用 renderComponentContent 的解决方法

1. 业务要求

  • 提交几组数字类型的表单,且表单项带单位,例如:‘m’, ‘kg/m³’;
  • 单位位置和其它页面的表单一样,在表单项里面

2.编码过程

  • 开始我使用的 ‘addonAfter’ 属性,实现效果如下
    使用addonAfter属性的效果
  • 查看其他同事写的代码发现,使用的是 ‘renderComponentContent()’ 方法,实现效果如下
    使用renderComponentContent

3.问题

  • 我发现加上该方法后并不生效
	{
      field: 'form1.field1',
      label: 'label1',
      component: 'InputNumber',
      colProps: { span: 8 },
      componentProps: {
        // addonAfter: 'mm',
        disabled: true,
      },
      renderComponentContent: () => {
        return {
          suffix: () => 'mm',
        };
      },
      required: true,
    },
  • 查看元素后发现,suffix 根本没有渲染,仔细观察同事和 demo 的代码,使用的都是 Input 组件

4.解决问题

  • 都改成 Input 组件,然后单独加上数字正则校验
  • 实现代码如下
	{
	  field: 'form1.field1',
      label: 'label1',
      component: 'Input',
      colProps: { span: 8 },
      renderComponentContent() {
        return {
          suffix: () => 'km',
        };
      },
      rules: [
        { required: true },
        {
          pattern: /^[\\-]?[1-9]?[0-9]+(\.[0-9]*)?$/g,
          message: '请输入数字',
          trigger: 'change',
        },
      ],
   },

5.其他问题

  • 改为 Input 类型后,使用接口返回的数值为表单赋值,报 required 校验错误,猜测是因为赋值的是数字而不是字符串的原因,赋值前循环 value + ‘’。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值