Prime multi-select下拉框能否通过单击/Shift+单击批量选多选项
Prime Multi-Select 千级选项批量选择实现方案
组件本身没有内置批量区间选择能力,但可以基于官方暴露的API扩展实现,不需要魔改组件源码,以下是可直接落地的方案:
Shift+Click 区间批量选择(最符合常规操作习惯)
实现逻辑和操作系统文件多选逻辑完全一致,用户学习成本为0:
- 给下拉选项容器绑定自定义点击事件监听,仅扩展点击逻辑,不覆盖组件原有单选、Ctrl点选的默认行为
- 全局维护一个变量记录用户上一次无功能键点击的选项索引
lastActiveIndex - 当检测到用户按住Shift点击选项时:
- 阻止默认的文本选中行为,避免页面选中文本出现蓝底
- 获取当前点击选项的索引
currentIndex,取两个索引之间的所有选项值 - 一次性更新组件绑定的选中值数组,将区间内所有未选中的选项加入数组,跳过已存在的重复项
- 1000条量级的数组批量更新耗时在10ms以内,不会出现界面卡顿。
单次点击批量选中筛选结果
针对用户先搜索过滤目标选项再批量选择的场景,直接利用组件自带的自定义插槽能力实现:
- 在组件的头部插槽位置添加两个操作按钮:「选中当前可见项」「取消选中当前可见项」
- 点击按钮时直接读取组件实例暴露的
filteredOptions属性(即当前经过搜索过滤后展示的全部选项),将对应值一次性合并到选中值数组/从选中值数组中移除即可 - 该方案完全走组件官方公开API,后续升级组件版本时出现兼容问题的概率极低。
必要的性能优化配置
- 开启组件自带的
virtualScroll虚拟滚动配置,1000+选项不会全量渲染DOM,滚动、选择操作的流畅度和百条选项无差异 - 批量更新选中值时不要循环调用组件的单条选中方法,直接替换绑定的选中值数组再触发变更检测,性能比逐个点击选中高两个数量级
- 如需支持Ctrl点选不连续多选项,可在现有点击监听逻辑里补充判断,逻辑复杂度极低。
实测在1200条选项的业务场景中,上述方案落地后,选中200个连续选项仅需2次点击,选中搜索过滤后的分散选项仅需1次点击,操作效率比逐个点击提升95%以上。
内容的提问来源于stack exchange,提问作者Hari ragavan
相关产品推荐
相关产品推荐

