@composy/select-vue

Vue 3 dropdown select component based on @composy/select-core
Install
npm install @composy/select-vue
Latest Version:0.0.2
Vue:3
License:MIT
Last Updated:Oct 12, 2026
Links: npm
Maintainer: swimly

@composy/select-vue

Vue 3 下拉选择器组件,基于 @composy/select-core

安装

pnpm add @composy/select-vue

快速开始

<template>
  <LSelect
    v-model="value"
    :options="options"
    searchable
    allow-clear
    placeholder="请选择"
    @change="onChange"
  />
</template>

<script setup>
import { ref } from 'vue'
import { LSelect } from '@composy/select-vue'

const value = ref(null)
const options = [
  { value: '1', label: '选项1' },
  { value: '2', label: '选项2' },
  { value: '3', label: '选项3' },
]

const onChange = val => console.log('选中:', val)
</script>

组件 Props

Prop 类型 默认值 说明
modelValue unknown - 绑定值
options SelectOption[] - 选项列表
groups SelectGroup[] - 分组列表
mode 'single' | 'multiple' 'single' 选择模式
size 'small' | 'medium' | 'large' 'medium' 尺寸变体
placeholder string '请选择' 占位文本
disabled boolean false 是否禁用
readonly boolean false 是否只读
searchable boolean false 是否可搜索
allowClear boolean false 是否允许清空
maxTagCount number 0 最多显示标签数
loading boolean false 是否加载中
emptyText string '暂无数据' 无数据提示
maxHeight number 300 下拉最大高度
dropdownWidth number | string - 下拉宽度
remoteDebounce number 300 远程搜索防抖间隔(毫秒)
remoteMethod (query, signal?) => Promise<SelectOption[]> - 远程搜索;新请求会取消旧请求,并忽略过期结果
renderOption (flat) => string - 自定义选项 HTML;只保留安全格式标签和非事件属性
renderLabel (opt) => string - 自定义标签渲染
name string - 表单字段名
trigger 'click' | 'hover' | 'manual' 'click' 触发方式
primaryColor string - 主色调

Events

事件 参数 说明
update:modelValue value 值变化(v-model)
change value, option 值变化
open - 下拉打开
close - 下拉关闭
search query 搜索
clear - 清除
focus FocusEvent 聚焦
blur FocusEvent 失焦

renderOption 仅支持安全格式标签;脚本类元素和事件、样式及资源加载属性会被移除。renderLabel 的结果按纯文本显示。

SelectOption.key 可为树节点提供稳定路径,SelectGroup.disabled 会继承到组内选项。Core 会复制输入的 options/groups,并对 state 返回防御性快照;远程搜索会取消旧请求、忽略过期响应,并直接展示当前服务端返回的结果。LSelectDropdown 与 LSelectOption 输出 listbox/option 的 ARIA 状态,下拉定位监听优先使用触发器所属 ownerDocument.defaultView。

插件安装

import { createApp } from 'vue'
import { SelectPlugin } from '@composy/select-vue'

createApp(App).use(SelectPlugin, { prefix: 'L' }).mount('#app')

useSelect 组合式函数

<script setup>
import { useSelect } from '@composy/select-vue'

const { state, open, close, setValue, getValue } = useSelect({
  options: [...],
  mode: 'multiple',
})
</script>

依赖

  • @composy/select-core — 核心引擎
  • vue ^3.5.32 (peerDependency)

构建产物

目录 格式
es/ ESM + .d.ts
esm/ ESM(保留模块结构)
lib/ CJS (.cjs)
dist/ UMD

Builder、ESLint 与 TypeScript 的权威配置位于 .ldesign/;根 tsconfig.json 是兼容入口。Vue Playground 使用 Vite 配置 src/playground/vite.config.ts:

corepack pnpm run build
corepack pnpm run type-check
corepack pnpm run lint:check
corepack pnpm run playground:build

License

MIT

Related Packages

vue3-select-component

A flexible & modern select-input control for Vue 3.

649,098 119
tselect

Dropdown menu for VueJs

348 1
vue-selectize

A Vue.js directive for selectize.js

9,747 24
vue-tags-component

Vue.js 2+ tags component

5,521 25

Version History

Version Released Vue License
0.0.2 3.5.32 MIT
0.0.1 ^3.5.32 MIT