Transfer 穿梭框
用于在两栏之间移动元素,支持搜索过滤、自定义渲染、虚拟滚动分页、尺寸、禁用、高亮动画等功能。
基础用法
通过 v-model 绑定目标侧已选值数组,options 提供全部可选数据:
源列表0/8
目标:bj, sh
带搜索
设置 showSearch 后,两栏顶部展示搜索输入框,可快速过滤条目:
暂无数据
目标:空
自定义过滤
通过 filter 属性自定义搜索逻辑,此处同时匹配 label 和 value:
暂无数据
目标:空
自定义标题
通过 titles 属性设置左右两栏标题,是一个二元数组:
暂无数据
目标:空
自定义渲染
使用 #item 插槽自定义每个选项的渲染,参数 { option, direction }:
👨💻
前端工程师 · 待选
👩🎨
UI设计师 · 待选
🧑🔧
后端工程师 · 待选
👨💼
产品经理 · 待选
👩🔬
测试工程师 · 待选
🧑🏫
技术主管 · 待选
暂无数据
目标:空
禁用选项与全局禁用
单个选项设置 disabled:true 禁用特定条目,全局 disabled 禁用整个穿梭框:
暂无数据
目标:空
不同尺寸
设置 size 属性使用三种预设尺寸:
小尺寸
暂无数据
中等尺寸(默认)
大尺寸
暂无数据
清空目标侧
设置 showClearRight 后,右侧面板底部出现清空按钮:
目标:bj, sh, gz
大数据量分页滚动
通过 pageSize 控制每次渲染数量,列表滚动到底自动加载更多:
滚动加载更多...
暂无数据
目标列表共 0 项
表单联动
结合 Card 组件重构完整场景,展示 change 事件处理:
权限分配
API
Props
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
modelValue | any[] | [] | 目标侧已选值数组(v-model) |
options | TransferOption[] | [] | 全部可选数据 |
disabled | boolean | false | 是否全局禁用 |
showSearch | boolean | false | 是否显示搜索框 |
filterable | boolean | true | 是否启用默认过滤(配合搜索框) |
filter | (query: string, option: TransferOption) => boolean | — | 自定义过滤函数 |
titles | [string, string] | ['源列表', '目标列表'] | 左右两栏标题 |
filterPlaceholder | string | '搜索...' | 搜索框占位文本 |
pageSize | number | 50 | 分页滚动每页条数 |
size | 'sm' | 'md' | 'lg' | 'md' | 穿梭框尺寸 |
showClearRight | boolean | false | 是否显示右侧清空按钮 |
emptyText | string | '暂无数据' | 无数据时的提示文本 |
Events
| 事件名 | 类型 | 说明 |
|---|---|---|
update:modelValue | (value: any[]) => void | 值变化时触发 |
change | (targetValues: any[], direction: "left" | "right", movedValues: any[]) => void | 元素移动后触发,direction 表示移动方向,movedValues 为移动的值 |
search | (direction: "left" | "right", query: string) => void | 搜索时触发 |
scroll | (direction: "left" | "right", event: Event) => void | 列表滚动时触发 |
Slots
| 插槽名 | 说明 |
|---|---|
item | 自定义选项渲染,参数 { option, direction } |
Methods
| 方法名 | 类型 | 说明 |
|---|---|---|
clearRight | () => void | 清空右侧目标列表 |
TransferOption
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
label | string | — | 选项显示文本 |
value | any | — | 选项唯一标识值 |
disabled | boolean | false | 是否禁用该选项 |