告别重复编码!amis下拉选择器3分钟实现单选/多选/搜索全功能
【免费下载链接】amis 前端低代码框架,通过 JSON 配置就能生成各种页面。 项目地址: 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 | 穿梭选择器 | 批量转移、搜索筛选 | 穿梭器示例 |
组件关系图
快速上手: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"
}
常见问题解决方案
- 选项不更新:添加
reload: true强制刷新数据源 - 搜索无结果:检查
adaptor函数是否正确转换数据格式 - 样式错乱:通过
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"
}
]
}
}
}
扩展阅读与资源
-
官方文档:
-
高级示例:
-
设计规范:
- amis设计系统
- 移动端适配指南
通过amis的下拉选择器组件,我们可以将原本需要3小时开发的复杂选择功能压缩到15分钟的JSON配置。下一篇将介绍如何自定义选择器的渲染模板和交互行为,敬请关注。
本文所有示例代码均来自amis官方示例库,可通过
git clone https://gitcode.com/GitHub_Trending/am/amis获取完整代码。
【免费下载链接】amis 前端低代码框架,通过 JSON 配置就能生成各种页面。 项目地址: https://gitcode.com/GitHub_Trending/am/amis
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



