Skip to content

Transfer 穿梭框 ​

双栏穿梭选择框,拥有经典的 Neo-Brutalism 双像素边框、硬投影和活跃状态的按压反馈。

预览 ​

Preview

基础用法

源列表
0/13
备选项 2
备选项 3
备选项 5
备选项 6
备选项 7
备选项 8
备选项 9
备选项 10
备选项 11
备选项 12
备选项 13
备选项 14
备选项 15
目标列表
0/2
备选项 1
备选项 4

可搜索过滤

源列表
0/14
备选项 1
备选项 3
备选项 4
备选项 5
备选项 6
备选项 7
备选项 8
备选项 9
备选项 10
备选项 11
备选项 12
备选项 13
备选项 14
备选项 15
目标列表
0/1
备选项 2

自定义标题和按钮文字

可选择项
0/15
备选项 1
备选项 2
备选项 3
备选项 4
备选项 5
备选项 6
备选项 7
备选项 8
备选项 9
备选项 10
备选项 11
备选项 12
备选项 13
备选项 14
备选项 15
已选择项
0/0
暂无数据

安装 ​

pnpm dlx brutx-vue@latest add transfer

用法 ​

基础用法 ​

vue
<script setup>
import { ref } from 'vue'
import { Transfer } from 'brutx-ui-vue'

const data = ref([
    { key: 1, label: '选项 1' },
    { key: 2, label: '选项 2' },
    { key: 3, label: '选项 3', disabled: true },
    { key: 4, label: '选项 4' }
])

const value = ref([1])
</script>

<template>
    <Transfer v-model="value" :data="data" />
</template>

搜索过滤 ​

通过设置 filterable 属性为 true 可以开启搜索过滤功能。

vue
<template>
    <Transfer v-model="value" :data="data" filterable />
</template>

自定义标题与按钮文本 ​

可以通过 titles 和 buttonTexts 分别自定义面板标题和转移按钮的文本内容。

vue
<template>
    <Transfer
        v-model="value"
        :data="data"
        :titles="['待选列表', '已选列表']"
        :button-texts="['撤销', '加入']"
    />
</template>

API 参考 ​

Transfer — 属性
名称类型默认值说明
class
string | undefined
undefined
追加到穿梭框根容器的自定义 CSS 类。
详情

声明类型

string | undefined

默认值详情

解析值
undefined

来源

Transfer.vue:14

packages/ui/src/components/transfer/Transfer.vue

modelValue
(string | number)[] | undefined
[]

按实例调用工厂函数

右侧目标面板中已选项目的 key 列表,通过 v-model 双向绑定。
详情

声明类型

(string | number)[] | undefined

默认值详情

解析值
[]

来源

Transfer.vue:15

packages/ui/src/components/transfer/Transfer.vue

data
TransferDataItem[] | undefined
[]

按实例调用工厂函数

穿梭框数据源;每项提供 key 和 label,并可用 disabled 禁止移动。
详情

声明类型

TransferDataItem[] | undefined

关联类型

TransferDataItem
类型定义 — TransferDataItem
export interface TransferDataItem {
    key: string | number
    label: string
    disabled?: boolean
}

默认值详情

解析值
[]

来源

Transfer.vue:16

packages/ui/src/components/transfer/Transfer.vue

filterable
boolean | undefined
false
在左右面板显示过滤输入框。
详情

声明类型

boolean | undefined

字面量

  • false
  • true

默认值详情

解析值
false

来源

Transfer.vue:17

packages/ui/src/components/transfer/Transfer.vue

filterMethod
((query: string, item: TransferDataItem) => boolean) | undefined
undefined
自定义查询与项目匹配函数;返回 true 的项目保留在过滤结果中。
详情

声明类型

((query: string, item: TransferDataItem) => boolean) | undefined

关联类型

TransferDataItem
类型定义 — TransferDataItem
export interface TransferDataItem {
    key: string | number
    label: string
    disabled?: boolean
}

默认值详情

解析值
undefined

来源

Transfer.vue:18

packages/ui/src/components/transfer/Transfer.vue

titles
string[] | undefined
undefined
按源面板、目标面板顺序指定两侧标题;未提供完整标题时使用本地化默认文案。
详情

声明类型

string[] | undefined

默认值详情

解析值
undefined

来源

Transfer.vue:19

packages/ui/src/components/transfer/Transfer.vue

buttonTexts
string[] | undefined
undefined
按左移、右移顺序设置两个穿梭按钮的文字;未提供时按钮仅显示方向图标。
详情

声明类型

string[] | undefined

默认值详情

解析值
undefined

来源

Transfer.vue:20

packages/ui/src/components/transfer/Transfer.vue

panelWidth
number | undefined
260
设置左右面板各自的宽度,单位为像素。
详情

声明类型

number | undefined

默认值详情

解析值
260

来源

Transfer.vue:22

packages/ui/src/components/transfer/Transfer.vue

panelHeight
number | undefined
400
设置左右面板的高度,单位为像素。
详情

声明类型

number | undefined

默认值详情

解析值
400

来源

Transfer.vue:24

packages/ui/src/components/transfer/Transfer.vue

Transfer — 事件
名称签名或类型说明
@update:modelValue
[value: (string | number)[]]
右侧目标列表的 key 集合变化时发出新数组,用于更新 v-model。
详情

声明类型

[value: (string | number)[]]

来源

Transfer.vue

packages/ui/src/components/transfer/Transfer.vue

@change
[value: (string | number)[], direction: "right" | "left", movedKeys: (string | number)[]]
项目在左右面板之间移动时发出更新后的目标 key 列表、移动方向和本次移动的 key。
详情

声明类型

[value: (string | number)[], direction: "right" | "left", movedKeys: (string | number)[]]

字面量

  • "left"
  • "right"

来源

Transfer.vue

packages/ui/src/components/transfer/Transfer.vue

数据类型 ​

ts
interface TransferDataItem {
    key: string | number
    label: string
    disabled?: boolean
}

导出类型 ​

ts
import type { TransferDataItem } from 'brutx-ui-vue'

可访问性 ​

  • 键盘操作:
    • 各面板内的 Checkbox 控件支持 Space / Enter 键进行勾选
    • 中间转移按钮支持 Tab 键聚焦并使用 Enter / Space 键触发穿梭
  • ARIA 属性:中间的操作按钮使用 aria-label 标示操作方向与含义("Move selected to right" / "Move selected to left"),各个选择列表项使用 Checkbox 进行状态修饰
  • 焦点管理:操作按钮在转移后保持焦点,便于用户连续使用键盘进行数据移动

蛮力铸就。