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

Formly表单Select组件始终保留空选项的实现问题

我来帮你解决这个问题!你遇到的重复空选项问题,是因为之前的代码通过splice修改了原options数组,导致多次触发表达式时重复添加空选项。正确的做法是始终返回一个包含单个空选项的新数组,而不是修改原数组,这样就能保证空选项一直存在且不会重复。

解决代码

{
  className: 'col-xs-3',
  key: 'advanceOrArrears',
  type: 'select2',
  templateOptions: {
    label: 'Advance or Arrears',
    required: true,
    // 这里只保留基础选项,空选项通过表达式统一添加
    options: [
      {name: 'Advance', value: 'ADVANCE'},
      {name: 'Arrears', value: 'ARREARS'}
    ]
  },
  expressionProperties: {
    'templateOptions.options': function($viewValue, $modelValue, scope) {
      // 每次都返回一个新数组:空选项 + 基础选项
      return [{name: '', value: ''}, ...scope.to.options];
    }
  }
}

为什么这样有效?

  1. 避免重复修改原数组:之前用splice会直接修改templateOptions.options的原数组,当表达式多次触发(比如组件初始化、模型变化时),会重复插入空选项,导致出现多个空值。
  2. 始终保留空选项:通过返回新数组的方式,不管模型有没有选中值,空选项都会固定出现在最前面,不会因为选中其他选项而消失。
  3. 保持代码简洁:不需要判断模型状态,直接统一构建包含空选项的选项列表。

如果你的初始需求是默认显示空选项,同时允许用户选择其他选项后仍能切换回空选项,这个方案完全适用。

额外说明

如果你的select2组件有特殊配置导致空选项被隐藏,可以检查一下Select2的配置项,确保没有启用自动过滤空选项的功能。不过上面的代码已经从数据源层面保证了空选项始终存在,一般情况下就能解决问题。

内容的提问来源于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:11:52