告别重复编码!amis下拉选择器3分钟实现单选/多选/搜索全功能

告别重复编码!amis下拉选择器3分钟实现单选/多选/搜索全功能

【免费下载链接】amis 前端低代码框架,通过 JSON 配置就能生成各种页面。 【免费下载链接】amis 项目地址: https://gitcode.com/GitHub_Trending/am/amis

你是否还在为实现一个带搜索功能的多选下拉框写200行代码?还在处理单选框与多选框的状态切换逻辑?amis框架的下拉选择器组件通过JSON配置即可完成90%的交互场景,让前端开发效率提升5倍。本文将系统讲解如何用amis构建单选、多选、搜索过滤等功能的下拉选择器,包含12个实战示例和完整配置模板。

核心组件概览

amis提供了6种下拉选择器变体,覆盖从基础单选到复杂级联的所有场景:

组件类型适用场景核心特性代码示例
select基础单选/多选搜索过滤、标签展示基础示例
button-group-select按钮式选择紧凑布局、视觉分组按钮组示例
list-select列表选择器大数量选项、分类展示列表选择示例
tree-select层级选择无限级联、节点勾选树形选择示例
chained-select级联选择动态加载子选项级联示例
transfer-picker穿梭选择器批量转移、搜索筛选穿梭器示例

组件关系图

mermaid

快速上手:3步实现基础单选

1. 基础配置结构

以下JSON配置即可生成一个带搜索功能的单选下拉框:

{
  "name": "city",
  "type": "select",
  "label": "城市选择",
  "placeholder": "请选择城市",
  "searchable": true,
  "clearable": true,
  "options": [
    {"label": "北京", "value": "beijing"},
    {"label": "上海", "value": "shanghai"},
    {"label": "广州", "value": "guangzhou"}
  ]
}

关键属性说明:

  • searchable: 启用搜索过滤
  • clearable: 显示清除按钮
  • options: 静态选项数组

2. 动态数据源配置

通过source属性从接口加载选项:

{
  "name": "city",
  "type": "select",
  "label": "动态城市选择",
  "source": "/api/mock2/form/getOptions",
  "autoComplete": "/api/mock2/options/autoComplete?term=$term"
}

当选项超过20个时,建议使用autoComplete实现输入联想,示例见远程自动补全

3. 多选模式切换

只需添加multiple: true即可切换为多选模式:

{
  "name": "tags",
  "type": "select",
  "label": "标签选择",
  "multiple": true,
  "joinValues": true,
  "delimiter": ",",
  "options": [
    {"label": "前端", "value": "frontend"},
    {"label": "后端", "value": "backend"},
    {"label": "移动端", "value": "mobile"}
  ]
}

多选模式下的关键属性:

  • joinValues: 是否用delimiter拼接值
  • delimiter: 多选值的分隔符
  • maxTags: 最多显示标签数量

高级功能实战

树形选择器:部门层级选择

树形选择器适用于组织架构、分类目录等层级数据:

{
  "name": "department",
  "type": "tree-select",
  "label": "部门选择",
  "multiple": true,
  "checkable": true,
  "cascadeCheck": true,
  "source": "/api/mock2/options/tree"
}

核心特性:

  • checkable: 显示勾选框
  • cascadeCheck: 级联勾选
  • showLine: 显示连接线(默认开启)

动态搜索与远程加载

当选项超过100条时,建议使用autoComplete实现动态搜索:

{
  "name": "user",
  "type": "select",
  "label": "用户搜索",
  "autoComplete": {
    "url": "/api/mock2/options/autoComplete",
    "method": "get",
    "data": {
      "term": "${term}"
    },
    "adaptor": "return {options: data.items.map(item => ({label: item.name, value: item.id}))}"
  }
}

实际效果可参考远程自动补全示例中的"选项自动补全"功能

按钮组选择器:状态切换场景

按钮组样式的选择器适合二选一或三选一的状态切换:

{
  "name": "status",
  "type": "button-group-select",
  "label": "订单状态",
  "inline": true,
  "options": [
    {"label": "全部", "value": ""},
    {"label": "待支付", "value": "pending"},
    {"label": "已完成", "value": "completed"},
    {"label": "已取消", "value": "cancelled"}
  ]
}

实战技巧与避坑指南

性能优化:大数据量处理

当选项超过1000条时,启用虚拟滚动提升性能:

{
  "type": "select",
  "virtualScroll": true,
  "virtualScrollItemSize": 36,
  "source": "/api/mock2/options/bigData"
}

常见问题解决方案

  1. 选项不更新:添加reload: true强制刷新数据源
  2. 搜索无结果:检查adaptor函数是否正确转换数据格式
  3. 样式错乱:通过className自定义样式类覆盖默认样式

完整配置模板

以下是企业级应用中常用的多功能选择器配置,包含搜索、多选、标签展示等功能:

{
  "name": "tags",
  "type": "select",
  "label": "多标签选择",
  "placeholder": "请选择或搜索标签",
  "multiple": true,
  "searchable": true,
  "clearable": true,
  "maxTags": 3,
  "joinValues": true,
  "delimiter": ",",
  "showLabel": true,
  "size": "middle",
  "options": [],
  "source": "/api/v1/tags",
  "autoComplete": "/api/v1/tags/search?keyword=$term",
  "onEvent": {
    "change": {
      "actions": [
        {
          "actionType": "reload",
          "componentId": "related-table"
        }
      ]
    }
  }
}

扩展阅读与资源

  1. 官方文档

  2. 高级示例

  3. 设计规范

通过amis的下拉选择器组件,我们可以将原本需要3小时开发的复杂选择功能压缩到15分钟的JSON配置。下一篇将介绍如何自定义选择器的渲染模板和交互行为,敬请关注。

本文所有示例代码均来自amis官方示例库,可通过git clone https://gitcode.com/GitHub_Trending/am/amis获取完整代码。

【免费下载链接】amis 前端低代码框架,通过 JSON 配置就能生成各种页面。 【免费下载链接】amis 项目地址: https://gitcode.com/GitHub_Trending/am/amis

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值