Skip to content

FaSelectV2 虚拟选择器

适用于大数据量虚拟列表,支持本地数据、远程数据、分页结果、自定义选项、标签同步和主动刷新。选项的实际高度与虚拟列表偏移均服从 itemHeight

千条数据虚拟滚动、多选与自定义选项

查看代码
Vue
<template>
	<div class="demo-stack">
		<FaSelectV2
			v-model="value"
			v-model:label="label"
			:data="data"
			multiple
			filterable
			more-detail
			clearable
			placeholder="从 1000 项中筛选"
			style="max-width: 480px"
			@change="changedData = $event"
		>
			<template #default="{ item }">
				<div class="demo-option-detail">
					<strong>{{ item.label }}</strong
					><small>{{ item["group"] }}</small>
				</div>
			</template>
		</FaSelectV2>
		<span class="demo-value"
			>值:{{ JSON.stringify(value) }};标签:{{ JSON.stringify(label) }};change 数据:{{ JSON.stringify(changedData) }}</span
		>
	</div>
</template>

<script setup lang="ts">
import { ref } from "vue";

const value = ref<number[]>([]);
const label = ref<string[] | null>([]);
const changedData = ref<unknown>();
const data = Array.from({ length: 1000 }, (_, index) => ({
	value: index + 1,
	label: `虚拟选项 ${String(index + 1).padStart(4, "0")}`,
	group: `分组 ${Math.floor(index / 100) + 1}`,
}));
</script>

FaSelectV2 完整 API

Props 属性 (65)

Fast 与 Element Plus 2.14.6 的属性已合并展示;Fast 修改项优先排列,未透传的原生属性保留用于兼容性核对。

属性来源说明类型默认值
collapseTagsFast 修改多选时是否折叠标签。BooleanFasttrueELfalse
collapseTagsTooltipFast 修改是否以 Tooltip 展示折叠标签。BooleanFasttrueELfalse
itemHeightFast 修改虚拟列表选项高度。NumberFast34EL34
loadingFast 修改加载状态。BooleanFastfalseELfalse
loadingTextFast 修改远程数据加载期间显示的文字。StringFast加载中...EL
modelValueFast 修改v-model 绑定值。String / Number / Boolean / Object / ArrayFastfalseELfalse
noDataTextFast 修改没有可用选项或树节点时显示的文字。StringFast暂无数据EL
noMatchTextFast 修改筛选没有匹配结果时显示的文字。StringFast暂无匹配的数据EL
optionsFast 修改虚拟选择器的选项数据。ArrayFastEL
popperClassFast 修改下拉浮层的自定义类名。StringFast""ELfalse
propsFast 修改字段映射配置。ObjectFast{"label":"label","value":"value","disabled":"disabled","options":"options"}EL{"label":"label","value":"value","disabled":"disabled","options":"options"}
labelFast 新增显示文本或同步标签值。String / Array
widthFast 新增组件宽度。String / Number100%
moreDetailFast 新增是否启用更宽的选项详情布局。Booleanfalse
lazyFast 新增是否启用懒加载。Booleantrue
defaultSelectedFast 新增是否根据当前值初始化选中项。Booleanfalse
dataFast 新增组件数据。Array[]
pageResultFast 新增分页数据。Booleanfalse
requestApiFast 新增异步数据请求函数。Function
initParamFast 新增请求初始化参数。String / Number / Object
allowCreateEL 原生是否允许创建新选项。Booleanfalse
autocompleteEL 原生输入框原生 autocomplete 属性。Stringnone
automaticDropdownEL 原生获得焦点后是否自动打开下拉菜单。Booleanfalse
clearableEL 原生是否允许清空。Booleanfalse
clearIconEL 原生清空按钮使用的图标组件。String / Object / Function{"name":"CircleClose","__name":"circle-close"}
effectEL 原生下拉浮层使用的 Tooltip 主题。Stringlight
tagTooltipEL 原生折叠标签 Tooltip 的自定义配置。Object{}
maxCollapseTagsEL 原生折叠多选标签前最多保留的标签数量。Number1
defaultFirstOptionEL 原生按 Enter 时是否默认选择首个匹配选项。Booleanfalse
disabledEL 原生是否禁用组件或当前选项。Booleanfalse
estimatedOptionHeightEL 原生Controls virtual-list sizing mode: if undefined, the list uses fixed item height from item-height; if provided, the list uses dynamic item sizing and this value as the estimated item height.Number
filterableEL 原生是否允许筛选。Booleanfalse
filterMethodEL 原生本地筛选选项时调用的过滤函数。Function
heightEL 原生组件高度。Number274
idEL 原生组件根输入元素的原生 id。String
multipleEL 原生是否允许多选。Booleanfalse
multipleLimitEL 原生多选模式允许选择的最大项目数,0 表示不限制。Number0
nameEL 原生图标名称、CSS 类名或外部 SVG 地址。String
remoteMethodEL 原生远程搜索关键字变化时调用的数据加载函数。Function
reserveKeywordEL 原生多选远程搜索选中项目后是否保留关键字。Booleantrue
placeholderEL 原生占位提示。String
teleportedEL 原生是否将下拉浮层传送到 appendTo 指定的容器。Booleantrue
persistentEL 原生下拉浮层隐藏后是否保留在 DOM 中。Booleantrue
popperStyleEL 原生下拉浮层根元素的自定义样式。String / Array / Object / Booleanfalse
popperOptionsEL 原生传递给 Popper 的定位配置。Object{}
remoteEL 原生是否启用远程搜索模式。Booleanfalse
debounceEL 原生远程搜索输入的防抖时间,单位毫秒。Number300
sizeEL 原生组件尺寸。String
valueKeyEL 原生选项值为对象时用于唯一标识选项的字段名。Stringvalue
scrollbarAlwaysOnEL 原生Controls whether the scrollbar is always displayedBooleanfalse
validateEventEL 原生模型值变化时是否触发表单校验。Booleantrue
offsetEL 原生偏移量或浮层偏移。Number12
remoteShowSuffixEL 原生远程搜索模式下是否显示选择器后缀图标。Booleanfalse
showArrowEL 原生下拉浮层是否显示指向触发元素的箭头。Booleantrue
placementEL 原生下拉浮层相对触发元素的首选位置。Stringbottom-start
fallbackPlacementsEL 原生首选位置空间不足时依次尝试的浮层位置。Array["bottom-start","top-start","right","left"]
tagTypeEL 原生多选标签使用的 Element Plus 类型。Stringinfo
tagEffectEL 原生多选标签使用的 Element Plus 主题效果。Stringlight
tabindexEL 原生组件输入元素的原生 tabindex。String / Number0
appendToEL 原生浮层挂载目标。String
fitInputWidthEL 原生下拉浮层宽度是否至少与输入框一致。Boolean / Numbertrue
suffixIconEL 原生选择器右侧显示的后缀图标组件。String / Object / Function{"name":"ArrowDown","__name":"arrow-down"}
emptyValuesEL 原生视为空值的模型值集合。Array
valueOnClearEL 原生清空时写入模型的值或值生成函数。String / Number / Boolean / Functionfalse
ariaLabelEL 原生组件面向辅助技术的可访问名称。String
Events 事件(10)
名称来源说明参数 / 类型
update:modelValueEL 原生更新 v-model。
changeEL 原生值或选择发生变化。
end-reachedEL 原生选择器滚动到下拉列表边界时触发。
remove-tagEL 原生多选模式移除标签时触发,参数为被移除的值。
visible-changeEL 原生选择器下拉浮层显示状态变化时触发。
focusEL 原生组件获得焦点时触发。
blurEL 原生组件失去焦点时触发。
clearEL 原生点击清空按钮并完成清空时触发。
update:labelFast 新增更新标签绑定值。
dataChangeFast 新增异步数据加载完成时触发。
Slots 插槽(8)
名称来源说明参数 / 类型
defaultEL 原生组件默认内容插槽。
headerEL 原生自定义头部内容或表格头部业务区域。
footerEL 原生自定义底部操作区域;弹层中可获得 loading 和 close。
prefixEL 原生自定义选择器输入框前缀内容。
emptyEL 原生组件无数据时的自定义内容。
tagEL 原生自定义多选标签内容。{ data: Option[], selectDisabled: boolean, deleteTag: (event: MouseEvent, option: Option) => void }
loadingEL 原生自定义加载状态内容。
labelEL 原生自定义表单标签、树节点标签或选择项标签。{ index: number, label: string | any, value: string | any }
Expose 暴露(9)
名称来源说明参数 / 类型
focusEL 原生让输入或选择组件获得焦点。
blurEL 原生让输入或选择组件失去焦点。
selectedLabelEL 原生选择器当前显示的标签文本。
loadingFast 新增Fast 业务加载状态。
refreshFast 新增重新执行组件数据请求或刷新业务内容。
setSelectionFast 新增设置选择器的选中值及标签。
clearSelectionFast 新增清除当前选择集合。
scrollToEL 原生滚动表格或虚拟列表到指定位置。
resetScrollTopEL 原生 · 未透传将虚拟选择器滚动位置重置到顶部。

FaSelectV2 实例方法

focus 聚焦

使选择器的输入框获取焦点

签名

ts
focus(): void;

示例

vue
<template>
	<FaSelectV2 ref="componentRef" />
</template>

<script setup lang="ts">
import { ref } from "vue";
import { FaSelectV2 } from "fast-element-plus";

const componentRef = ref<InstanceType<typeof FaSelectV2>>();
componentRef.value?.focus();
</script>

输入

该方法没有输入参数。

返回

返回值返回值类型返回值说明
resultvoid没有返回值。

blur 失焦

使选择器的输入框失去焦点,并隐藏下拉框

签名

ts
blur(): void;

示例

vue
<template>
	<FaSelectV2 ref="componentRef" />
</template>

<script setup lang="ts">
import { ref } from "vue";
import { FaSelectV2 } from "fast-element-plus";

const componentRef = ref<InstanceType<typeof FaSelectV2>>();
componentRef.value?.blur();
</script>

输入

该方法没有输入参数。

返回

返回值返回值类型返回值说明
resultvoid没有返回值。

scrollTo 滚动

滚动到指定选项索引。

签名

ts
scrollTo(index: number): void;

示例

vue
<template>
	<FaSelectV2 ref="componentRef" />
</template>

<script setup lang="ts">
import { ref } from "vue";
import { FaSelectV2 } from "fast-element-plus";

const componentRef = ref<InstanceType<typeof FaSelectV2>>();
componentRef.value?.scrollTo(120);
</script>

输入

输入值输入值类型必填/默认值输入值说明
indexnumber从零开始的选项索引。

返回

返回值返回值类型返回值说明
resultvoid没有返回值。

refresh 刷新

刷新

签名

ts
refresh(): Promise<void>;

示例

vue
<template>
	<FaSelectV2 ref="componentRef" />
</template>

<script setup lang="ts">
import { ref } from "vue";
import { FaSelectV2 } from "fast-element-plus";

const componentRef = ref<InstanceType<typeof FaSelectV2>>();
const result = await componentRef.value?.refresh();
</script>

输入

该方法没有输入参数。

返回

返回值返回值类型返回值说明
resultPromise<void>异步完成后的结果;Promise 拒绝时由调用方处理。

setSelection 勾选

设置选择

签名

ts
setSelection(value: Exclude<ElSelectorModelValue, null | undefined>): void;

示例

vue
<template>
	<FaSelectV2 ref="componentRef" />
</template>

<script setup lang="ts">
import { ref } from "vue";
import { FaSelectV2 } from "fast-element-plus";

const componentRef = ref<InstanceType<typeof FaSelectV2>>();
componentRef.value?.setSelection(1);
</script>

输入

输入值输入值类型必填/默认值输入值说明
valueElSelectorValue | ElSelectorValue[]要设置的表单值、选择值或过滤关键字。

返回

返回值返回值类型返回值说明
resultvoid没有返回值。

clearSelection 勾选

清除选择

签名

ts
clearSelection(): void;

示例

vue
<template>
	<FaSelectV2 ref="componentRef" />
</template>

<script setup lang="ts">
import { ref } from "vue";
import { FaSelectV2 } from "fast-element-plus";

const componentRef = ref<InstanceType<typeof FaSelectV2>>();
componentRef.value?.clearSelection();
</script>

输入

该方法没有输入参数。

返回

返回值返回值类型返回值说明
resultvoid没有返回值。