表单筛选利器:TinyVue BaseSelect 基础选择器实战

表单筛选利器:TinyVue BaseSelect 基础选择器实战

筛选区、编辑表单、弹窗配置------选择器是出现频率最高的表单控件之一。业务侧常常要在单选与多选、本地选项与远程搜索、几十个选项与上万条数据之间切换;如果每种模式各写一套,样式、键盘行为和清空逻辑很难统一。

TinyVue 的 BaseSelect(基础选择器)在 Select 能力之上提供更完整的表单场景支持:标签式与配置式双写法、多选标签折叠、远程搜索、虚拟滚动、选项缓存等。下面按接入路径说明如何在项目中快速用起来。

两种写法:标签式与配置式

标签式 适合选项模板需要自定义图标的场景,通过 tiny-option 子组件声明每一项:

vue 复制代码
<template>
  <tiny-base-select v-model="value">
    <tiny-option
      v-for="item in options"
      :key="item.value"
      :label="item.label"
      :value="item.value"
      :icon="item.icon"
    />
  </tiny-base-select>
</template>

<script setup>
import { ref } from 'vue'
import { TinyBaseSelect, TinyOption } from '@opentiny/vue'
import { iconFile } from '@opentiny/vue-icon'

const value = ref('')
const options = ref([
  { value: 'bj', label: '北京', icon: iconFile() },
  { value: 'sh', label: '上海', icon: iconFile() }
])
</script>

配置式 把选项列表交给 options 属性,模板更简洁,也便于与后端 JSON 直接对接:

vue 复制代码
<tiny-base-select v-model="value" :options="options" />

字段名默认 label / value,可通过 text-fieldvalue-field 映射后端字段,无需改数据层。

多选:标签、必选与数量限制

开启 multiple 后,v-model 绑定值为数组,选中项以 Tag 形式展示。企业表单里常见的三个增强点:

vue 复制代码
<tiny-base-select
  v-model="value"
  multiple
  :multiple-limit="5"
  show-limit-text
  collapse-tags
  :options="options"
/>
  • multiple-limit + show-limit-text:限制最多可选个数,并展示「已选 / 上限」提示。
  • required(在 option 或 options 项上配置):标记必选项,适合「至少选一个角色」类规则。
  • collapse-tags:多选时折叠标签,避免输入框被撑爆;可配合 show-proportion 显示占比。

多选搜索场景下,reserve-keyword 可在选中一项后保留当前搜索词,连续筛选更高效。

搜索:本地过滤、面板搜索与远程加载

BaseSelect 提供多层搜索能力,按数据来源选用:

模式 关键属性 适用场景
输入框过滤 filterablefilter-method 选项已在本地,边输边筛
面板内搜索 searchable 选项多,在下拉面板顶部单独放搜索框
远程搜索 filterable + remote + remote-method 选项来自接口,按关键字分页查询

远程搜索示例:

vue 复制代码
<template>
  <tiny-base-select
    v-model="value"
    filterable
    remote
    :remote-method="remoteMethod"
    :loading="loading"
    :options="options"
  />
</template>

<script setup>
import { ref } from 'vue'

const value = ref('')
const options = ref([])
const loading = ref(false)

function remoteMethod(query) {
  if (!query) {
    options.value = []
    return
  }
  loading.value = true
  fetchUsers(query).then((list) => {
    options.value = list
    loading.value = false
  })
}
</script>

需要允许用户创建不在列表中的条目时,组合 allow-createfilterabledefault-first-option 则支持按 Enter 快速选中第一个匹配项。

大数据量:虚拟滚动

选项达到万级时,普通渲染会导致下拉打开卡顿。配置式下开启 optimization 即可启用虚拟滚动:

vue 复制代码
<tiny-base-select
  v-model="value"
  :options="largeOptions"
  optimization
/>

多选 + 大数据场景建议同时开启 collapse-tags,并合理设置 multiple-limit,避免一次选中过多 DOM 节点。官方示例中 10 万条选项仍可流畅滚动,适合城市、物料编码等长列表选择。

体验细节:清空、缓存与插槽扩展

单选场景下 clearable 提供一键清除;clear-no-match-value 可在 v-model 值在 options 中找不到匹配时自动清空,避免脏数据提交。

配置式还支持 cache-op 本地缓存用户常选项,按点击频次或时间排序并在下拉中高亮------适合「最近使用的审批人 / 部门」这类高频字段。

插槽方面,prefix 自定义输入框前缀,footer 扩展下拉底部(如「新增条目」按钮),empty 自定义无数据展示;top-create 配合 @top-create-click 可在面板顶部放新增入口。

  • BaseSelect :表单字段,有明确 v-model 绑定值,强调选项选择与回显。
  • Dropdown:动作列表,无表单绑定语义,适合「操作」而非「选值」。
  • Select :同族选择器;BaseSelect 提供更完整的多选、虚拟滚动、缓存等企业级增强,新表单优先评估 BaseSelect

小结

BaseSelect 把单选、多选、搜索、远程加载、虚拟滚动和选项缓存收敛到同一组件,标签式与配置式满足不同团队的模板习惯。接入建议:小数据量用配置式快速上线;远程字段先打通 remote-method;万级选项记得开 optimization;多选表单提前规划 collapse-tagsmultiple-limit,避免布局与性能问题。

关于 OpenTiny

OpenTiny 是面向企业级应用的前端开发解决方案,TinyVue 作为核心 UI 组件库,支持 Vue 2、Vue 3 及 PC / Mobile 多端场景,提供 100+ 高质量组件,开箱即用。

欢迎体验 TinyVue 组件库:opentiny.design/tiny-vue

TinyVue 代码仓库:github.com/opentiny/ti...(欢迎 Star ⭐)

添加微信小助手 opentiny-official,一起交流前端技术~

相关推荐
先吃饱再说2 小时前
从零理解 Vue 3:组件化、数据绑定与响应式完全指南
vue.js·前端框架
gis开发之家4 小时前
《Vue3 从入门到大神29篇》单元测试与 E2E 测试 —— 保障 Vue3 项目的质量
前端·javascript·vue.js·单元测试·前端框架·vue3
forever_world4 小时前
# 💧 从前端视角,彻底搞懂 AI 流式输出 —— 从"接根水管"到 Vue 3 实战
前端·vue.js
QQ_21696290964 小时前
【项目编号:project05966】SpringBoot/Vue 电影推荐系统:用户端推荐、电影资讯与后台数据管理全流程
vue.js·spring boot·后端
阿黎梨梨5 小时前
AI 推理太慢用户要退钱?前端流式输出(Stream)究竟是何方神圣?
前端·vue.js
只一5 小时前
从0到1吃透AI流式输出:Vue3+DeepSeek实战,解锁丝滑对话体验
前端·vue.js
Cobyte5 小时前
24.Vue Vapor 组件事件 emit 的实现
前端·javascript·vue.js
用户2930750976695 小时前
# 从零开始,打造 AI 产品的第一个关键体验——流式输出
前端·vue.js
饮茶三千5 小时前
基于 WangEditor 的富文本编辑器定制实践
前端·vue.js·设计模式