Skip to content
API 风格:

Transferencia ​

Listado de dos paneles + selección y movimiento; la partición de datos y la lógica de movimiento se resuelven en la capa core de forma inmutable. Ambos paneles son role="listbox" (patrón listbox de la APG).

Uso básico ​

Uso básico
1 / 3
  • A
2 / 3
  • B
  • C
vue
<script setup>
import { ref } from 'vue'
const source = ref(['a'])
const items = [
  { key: 'a', label: 'A' },
  { key: 'b', label: 'B' },
  { key: 'c', label: 'C', disabled: true },
]
</script>

<template>
  <LhTransfer :data="items" v-model="source" />
</template>
vue
<script>
export default {
  data() {
    return {
      source: ['a'],
      items: [
        { key: 'a', label: 'A' },
        { key: 'b', label: 'B' },
        { key: 'c', label: 'C', disabled: true },
      ],
    }
  },
}
</script>

<template>
  <LhTransfer :data="items" v-model="source" />
</template>

Deshabilitado ​

disabled deshabilita todo el componente de transferencia.

Transferencia deshabilitada
1 / 3
  • A
2 / 3
  • B
  • C
vue
<script setup lang="ts">
import { ref } from 'vue'

const source = ref(['a'])
const items = [
  { key: 'a', label: 'A' },
  { key: 'b', label: 'B' },
  { key: 'c', label: 'C', disabled: true },
]
</script>

<template>
  <LhTransfer :data="items" v-model="source" disabled />
</template>
vue
<script>
export default {
  data() {
    return {
      source: ['a'],
      items: [
        { key: 'a', label: 'A' },
        { key: 'b', label: 'B' },
        { key: 'c', label: 'C', disabled: true },
      ],
    }
  },
}
</script>

<template>
  <LhTransfer :data="items" v-model="source" disabled />
</template>

API ​

LhTransfer Props ​

PropDescripciónTipoPredeterminado
dataDatos completos[LhTransferItem](#type-LhTransferItem)[]—
modelValueLista de claves del lado izquierdo (origen, v-model controlado)(string | number)[]() => []
disabledDeshabilitadobooleanfalse
sxPropiedades de diseño rápido sxLhSxProps—

Events ​

EventoDescripciónParámetros
update:modelValueSe dispara cuando cambia la lista de claves del lado derecho (destino), para usarse con v-model(keys: Array<string | number>)
changeSe dispara tras completarse el movimiento de datos(keys: Array<string | number>, direction: 'left-to-right' | 'right-to-left')

LhTransferItem ​

CampoDescripciónTipo
keyClave únicastring | number
labelTexto mostradostring
disabledDeshabilitado (no se puede mover)boolean

Accesibilidad ​

  • Ambos paneles son role="listbox" + aria-multiselectable; los elementos son role="option" + aria-selected / aria-disabled
  • Los botones de movimiento son <button> reales con nombre (mover a la izquierda / mover a la derecha); el selector total es un checkbox nativo (el estado intermedio usa el indeterminate real)
  • Cada lado dispone de su propio campo de búsqueda con aria-label; los elementos deshabilitados se interceptan en toda la cadena (selección, selección total, movimiento)

Definiciones de tipos ​

Este componente exporta las siguientes estructuras de tipos TypeScript (extraídas automáticamente de los fuentes packages/components/transfer/src/types.ts y @lh-ui/share/core/*; abre cada entrada para ver la definición completa; consulta la tabla de Props de arriba para la descripción de los atributos):

LhTransferProps
ts
export interface LhTransferProps {
  /** Datos completos */
  data: LhTransferItem[]
  /** Lista de claves del lado izquierdo (origen, v-model controlado) */
  modelValue?: Array<string | number>
  /** Deshabilitado */
  disabled?: boolean
  /** Propiedades de diseño rápido sx */
  sx?: LhSxProps
}
LhTransferSide (de @lh-ui/share/core/transfer)
ts
/** Lado del panel */
export type LhTransferSide = 'left' | 'right'
LhTransferItem (de @lh-ui/share/core/transfer)
ts
/** Elemento de datos de la transferencia */
export interface LhTransferItem {
  /** Clave única */
  key: string | number
  /** Texto mostrado */
  label: string
  /** Deshabilitado (no se puede mover) */
  disabled?: boolean
}

La belleza de la tradición, el cimiento del código