Transfer 穿梭框
基础用法
Transfer 的数据通过 data
属性传入。数据需要是一个对象数组,每个对象有以下属性:key
为数据的唯一标识,label
为显示文本,disabled
表示该项数据是否禁止转移。 目标列表中的数据项会同步到绑定至 v-model
的变量,值为数据项的 key 所组成的数组。 当然,如果希望在初始状态时目标列表不为空,可以为 v-model
绑定的变量赋予一个初始值。
可筛选
您可以搜索和过滤数据项。
将 filterable
属性设置为 true
以启用筛选模式。 默认情况下,如果数据项的 label
包含搜索关键字,它将显示在结果中。 您还可以通过 filter-method
属性实现自己的筛选方法。 它接受一个方法,并在关键字更改时将搜索关键字和每个数据项传递给它。 对于某个数据项,如果方法返回 true,它将显示在结果列表中。
可自定义
您可以自定义列表标题、按钮文本、数据项的渲染函数、列表页脚中的选中状态文本以及列表页脚内容。
可分别用 titles
、button-texts
、render-content
和 format
属性来自定义列表标题、按钮的文本、数据项的渲染函数以及列表顶部的勾选状态文案。 此外,您还可以使用作用域插槽来自定义数据项。 对于列表的页脚,提供了两个具名插槽:left-footer
和 right-footer
。 此外,如果您想在初始时勾选某些项目,您可以使用 left-default-checked
和 right-default-checked
。 最后,这个例子演示了 change
事件。 请注意,此演示无法在 JSFiddle 中运行,因为它不支持 JSX 语法。 在实际项目中,如果相关依赖项配置正确,render-content
就可以工作。
自定义空状态内容 2.9.0
当列表为空或没有筛选结果时,您可以自定义其显示内容。
使用 left-empty
和 right-empty
插槽为每个面板自定义空状态内容。
数据项属性别名
默认情况下,Transfer 会在数据项中寻找 key
、label
和 disabled
属性。 如果您的数据项有不同的键名,您可以使用 props
属性来定义别名。
此示例中的数据项没有 key
或 label
,而是有 value
和 desc
。 因此,您需要为 key
和 label
设置别名。
Transfer API
Transfer 属性
名称 | 描述 | 类型 | 默认值 |
---|---|---|---|
model-value / v-model | 绑定值 | object | [] |
data | Transfer 的数据源 | object | [] |
filterable | 是否可搜索 | boolean | false |
搜索框的占位符 | 搜索框的占位符 | string | — |
filter-method | 自定义搜索方法 | Function | — |
目标列表元素的排序策略。 如果设置为 original ,则目标列表中的元素将保持与数据源相同的顺序。 如果设置为 push ,则新添加的元素将被推送到目标列表的底部。 如果设置为 unshift ,则新添加的元素将被插入到目标列表的顶部。 | original | 枚举 | 自定义列表标题 |
自定义列表标题 | 自定义列表标题 | object | [] |
自定义按钮文案 | 自定义按钮文案 | object | [] |
render-content | 用于数据项的自定义渲染函数 | object | — |
format | 列表顶部勾选状态的文案 | object | {} |
props | 数据源的字段别名 | object | — |
左侧列表初始状态下被勾选的数据的 key 组成的数组 | 左侧列表初始状态下被勾选的数据的 key 组成的数组 | object | [] |
右侧列表初始状态下被勾选的数据的 key 组成的数组 | 右侧列表初始状态下被勾选的数据的 key 组成的数组 | object | [] |
validate-event | 是否触发表单验证 | boolean | true |
Transfer 事件
名称 | 描述 | 类型 |
---|---|---|
change | 右侧列表元素变化时触发 | Function |
左侧列表元素被用户选中 / 取消选中时触发 | 左侧列表元素被用户选中 / 取消选中时触发 | Function |
右侧列表元素被用户选中 / 取消选中时触发 | 右侧列表元素被用户选中 / 取消选中时触发 | Function |
Transfer 插槽
名称 | 描述 |
---|---|
default | 数据项的内容,作用域参数为 { option } |
左侧列表底部的内容 | 左侧列表底部的内容 |
右侧列表底部的内容 | 右侧列表底部的内容 |
左侧面板为空或无数据匹配过滤器时的内容 2.9.0 | 左侧面板为空或无数据匹配过滤器时的内容 |
右侧面板为空或无数据匹配过滤器时的内容 2.9.0 | 右侧面板为空或无数据匹配过滤器时的内容 |
Transfer Exposes
名称 | 描述 | 类型 |
---|---|---|
清空某个面板的搜索关键词 | 清空某个面板的搜索关键词 | Function |
左侧面板 ref | 左侧面板 ref | object |
右侧面板 ref | 右侧面板 ref | object |
Transfer Panel API
Transfer Panel Exposes
名称 | 描述 | 类型 |
---|---|---|
搜索关键词 | 搜索关键词 | string |
类型声明
显示声明
import type { h as H, VNode } from 'vue'
type TransferKey = string | number
type TransferDirection = 'left' | 'right'
type TransferDataItem = Record<string, any>
type renderContent = (h: typeof H, option: TransferDataItem) => VNode | VNode[]
interface TransferFormat {
noChecked?: string
hasChecked?: string
}
interface TransferPropsAlias {
label?: string
key?: string
disabled?: string
}