Skip to content
API 风格:

Transfert ​

Listes double colonne + sélection par cases à cocher. Le partitionnement des données et la logique de déplacement sont implémentés de manière immuable dans la couche core. Les deux colonnes sont des role="listbox" (pattern listbox des APG).

Utilisation de base ​

Utilisation de base
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>

Désactivé ​

disabled désactive l'ensemble du composant de transfert.

Transfert désactivé
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 ​

PropDescriptionTypeValeur par défaut
dataDonnées complètes[LhTransferItem](#type-LhTransferItem)[]—
modelValueListe des clés de gauche (source), contrôlée par v-model(string | number)[]() => []
disabledDésactivébooleanfalse
sxPropriétés de mise en page rapide sxLhSxProps—

Events ​

ÉvénementDescriptionParamètre de rappel
update:modelValueÉmis lorsque la liste des clés de droite (cible) change, à utiliser avec v-model(keys: Array<string | number>)
changeÉmis après un déplacement de données(keys: Array<string | number>, direction: 'left-to-right' | 'right-to-left')

LhTransferItem ​

ChampDescriptionType
keyClé uniquestring | number
labelTexte affichéstring
disabledDésactivé (non déplaçable)boolean

Accessibilité ​

  • Les deux colonnes sont des role="listbox" + aria-multiselectable, les éléments des role="option" + aria-selected / aria-disabled
  • Les boutons de déplacement sont de vrais <button> nommés (Déplacer vers la gauche / Déplacer vers la droite) ; la case « tout sélectionner » est une checkbox native dont l'état intermédiaire est un véritable indeterminate
  • Chaque côté dispose de sa propre barre de recherche avec aria-label ; les éléments désactivés sont bloqués sur toute la chaîne (sélection, sélection globale, déplacement)

Définitions de types ​

Les structures de types TypeScript exportées par ce composant sont les suivantes (extraites automatiquement de packages/components/transfer/src/types.ts et de @lh-ui/share/core/* ; cliquez sur chaque entrée pour afficher la définition complète ; les descriptions des props se trouvent dans le tableau Props ci-dessus) :

LhTransferProps
ts
export interface LhTransferProps {
  /** Données complètes */
  data: LhTransferItem[]
  /** Liste des clés de gauche (source), contrôlée par v-model */
  modelValue?: Array<string | number>
  /** Désactivé */
  disabled?: boolean
  /** Propriétés de mise en page rapide sx */
  sx?: LhSxProps
}
LhTransferSide (provenant de @lh-ui/share/core/transfer)
ts
/** Côté du panneau */
export type LhTransferSide = 'left' | 'right'
LhTransferItem (provenant de @lh-ui/share/core/transfer)
ts
/** Élément de données du transfert */
export interface LhTransferItem {
  /** Clé unique */
  key: string | number
  /** Texte affiché */
  label: string
  /** Désactivé (non déplaçable) */
  disabled?: boolean
}

La beauté de la tradition, la fondation du code