Transfer

Basic usage

Data is passed to Transfer via the data attribute. The data needs to be an object array, and each object should have these attributes: key being the identification of the data item, label being the displayed text, and disabled indicating if the data item is disabled. Items inside the target list are in sync with the variable binding to v-model, and the value of that variable is an array of target item keys. So, if you don't want the target list be initially empty, you can initialize the v-model with an array.

No data

Filterable

You can search and filter data items.

Set the filterable attribute to true to enable filter mode. By default, if the data item label contains the search keyword, it will be included in the search result. Also, you can implement you own filter method with the filter-method attribute. It takes a method and passes search keyword and each data item to it whenever the keyword changes. For a certain data item, if the method returns true, it will be included in the result list.

No data

Customizable

You can customize list titles, button texts, render function for data items, checking status texts in list footer and list footer contents.

Use titles, button-texts, render-content and format to respectively customize list titles, button texts, render function for data items, checking status texts in list header. Plus, you can also use scoped slot to customize data items. For list footer contents, two named slots are provided: left-footer and right-footer. Plus, if you want some items initially checked, you can use left-default-checked and right-default-checked. Finally, this example demonstrate the change event. Note that this demo can't run in JSFiddle because it doesn't support JSX syntax. In a real project, render-content will work if relevant dependencies are correctly configured.

Customize data items using render-content

Customize data items using scoped slot

Prop aliases

By default, Transfer looks for key, label and disabled in a data item. If your data items have different key names, you can use the props attribute to define aliases.

The data items in this example do not have keys or labels, instead they have values and descs. So you need to set aliases for key and label.

No data

API

Attributes

NameDescriptionTypeDefault
model-value / v-modelbinding valueobject[]
datadata sourceobject[]
filterablewhether Transfer is filterablebooleanfalse
filter-placeholderplaceholder for the filter inputstring
filter-methodcustom filter methodFunction
target-orderorder strategy for elements in the target list. If set to original, the elements will keep the same order as the data source. If set to push, the newly added elements will be pushed to the bottom. If set to unshift, the newly added elements will be inserted on the topenumoriginal
titlescustom list titlesobject[]
button-textscustom button textsobject[]
render-contentcustom render function for data itemsobject
formattexts for checking status in list headerobject{}
propsprop aliases for data sourceobject
left-default-checkedkey array of initially checked data items of the left listobject[]
right-default-checkedkey array of initially checked data items of the right listobject[]
validate-eventwhether to trigger form validationbooleantrue

Events

NameDescriptionType
changetriggers when data items change in the right listFunction
left-check-changetriggers when end user changes the checked state of any data item in the left listFunction
right-check-changetriggers when end user changes the checked state of any data item in the right listFunction

Slots

NameDescription
defaultCustom content for data items. The scope parameter is
left-footercontent of left list footer
right-footercontent of right list footer

Exposes

MethodDescriptionType
clearQueryclear the filter keyword of a certain panelFunction

Type Declarations

Show declarations
ts
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
}

Source

ComponentStyleDocs

Contributors