Skip to content

Transfer 穿梭框

穿梭框将多个列表项从一个列表移动到另一个列表。通常用于权限分配、角色绑定等场景。

基础用法

列表 1共 5 项
  • Illinois
  • Maryland
  • Florida
  • Colorado
  • Connecticut
列表 2共 2 项
  • California
  • Texas
基础用法

可搜索

列表 1共 7 项
  • California
  • Illinois
  • Maryland
  • Texas
  • Florida
  • Colorado
  • Connecticut
列表 2共 0 项
无数据
可搜索

自定义文案

Source共 3 项
  • Option 1
  • Option 2
  • Option 3
Target共 0 项
无数据
自定义文案

数据映射

列表 1共 3 项
  • 研发部
  • 人事部
  • 财务部
列表 2共 1 项
  • 市场部
字段别名

内容自定义

列表 1共 7 项
  • 1 - California
  • 2 - Illinois
  • 3 - Maryland
  • 4 - Texas
  • 5 - Florida
  • 6 - Colorado
  • 7 - Connecticut
列表 2共 0 项
无数据
列表 1共 7 项
  • California
  • Illinois
  • Maryland
  • Texas
  • Florida
  • Colorado
  • Connecticut
列表 2共 0 项
无数据
内容自定义

虚拟滚动

列表 1共 2000 项
  • Option 0
  • Option 1
  • Option 2
  • Option 3
  • Option 4
  • Option 5
  • Option 6
  • Option 7
  • Option 8
  • Option 9
  • Option 10
  • Option 11
  • Option 12
  • Option 13
  • Option 14
  • Option 15
列表 2共 0 项
无数据
虚拟滚动

按钮区自定义

列表 1共 3 项
  • Item A
  • Item B
  • Item C
列表 2共 0 项
无数据
按钮区域自定义

在 Nuxt 中使用

Transfer 组件完全支持 Nuxt 3/4 环境。在服务器端渲染(SSR)时,组件会预先渲染左右两个列表面板的基础 HTML 结构,确保首屏加载时内容可见,无水合闪烁。

列表 1共 2 项
  • Nuxt 2
  • Nuxt 4
列表 2共 1 项
  • Nuxt 3
Nuxt 中使用

SSR 注意事项

  • ✅ 初始选中的状态(modelValue)在服务端正确渲染至右侧列表
  • ✅ 列表项的标签(label)和禁用状态支持 SSR 渲染
  • ✅ 虚拟滚动(virtual)支持首屏基础节点渲染
  • ⚠️ 按钮交互、列表搜索匹配、选中状态切换在客户端激活(Hydration)后生效
  • 💡 下拉或浮层提示(如 Tooltip)通过 Teleport 挂载,不影响主 HTML 结构

渲染性能

对于万级数据,Transfer 内部采用了高效的组件模板编译优化。即便在没有开启 virtual 的情况下,首屏生成的 HTML 也是经过精简的,确保了 SSR 性能。

API

Props

属性名说明类型默认值
model-value / v-model绑定值TransferKey[][]
data数据源TransferData[][]
filterable是否可搜索booleanfalse
filter-placeholder搜索框占位符string'请输入关键词'
filter-method自定义搜索方法(query, item) => boolean
target-order右侧排序策略'original' | 'push' | 'unshift''original'
titles列表标题[string, string]['列表 1', '列表 2']
button-texts按钮文案[string, string][]
render-content自定义渲染内容(h, option) => VNode
props数据源别名配置TransferPropsAlias
left-default-checked左侧默认勾选TransferKey[][]
right-default-checked右侧默认勾选TransferKey[][]
virtual开启虚拟滚动booleanfalse
height列表高度number280
item-height行高(虚拟滚动)number40
empty-text空数据文本string'暂无数据'
show-all-checkbox是否显示全选booleantrue
left-title左侧标题string
right-title右侧标题string
disabled是否禁用booleanfalse

Events

事件名说明回调参数
change右侧列表元素变化时触发(value, direction, movedKeys)
left-check-change左侧勾选变化时触发(value, movedKeys)
right-check-change右侧勾选变化时触发(value, movedKeys)

Slots

插槽名说明参数
default自定义数据项内容{ option }
left-header左侧头部内容
right-header右侧头部内容
left-footer左侧底部内容
right-footer右侧底部内容
left-empty左侧空内容
right-empty右侧空内容
buttons自定义操作按钮区{ moveToLeft, moveToRight, leftChecked, rightChecked }

Expose

方法名说明类型
clearLeftChecked清空左侧勾选() => void
clearRightChecked清空右侧勾选() => void
leftPanel左面板实例TransferPanelExpose
rightPanel右面板实例TransferPanelExpose

主题变量

Variable NameDefaultDescription
--yh-transfer-panel-width200px面板宽度
--yh-transfer-panel-height300px面板高度
--yh-transfer-header-height40px头部高度
--yh-transfer-header-bg#f5f7fa头部背景
--yh-transfer-item-height32px行高
--yh-transfer-border-color#ebeef5边框颜色

Released under the MIT License.