Skip to content
API 风格:

Sélecteur segmenté ​

Bascule d'options mutuellement exclusives, typique des scénarios de changement de vue.

Utilisation de base ​

Utilisation de base
vue
<script setup>
import { ref } from 'vue'
const view = ref('Liste')
</script>

<template>
  <LhSegmented v-model="view" :options="['Liste', 'Cartes', 'Tableau']" />
</template>
vue
<script>
export default {
  data() {
    return { view: 'Liste' }
  },
}
</script>

<template>
  <LhSegmented v-model="view" :options="['Liste', 'Cartes', 'Tableau']" />
</template>

Éléments désactivés et block ​

Élément désactivé
vue
<script setup>
import { ref } from 'vue'
const seg = ref('day')
</script>

<template>
  <LhSegmented
    v-model="seg"
    block
    :options="[{ label: 'Jour', value: 'day' }, { label: 'Semaine', value: 'week' }, { label: 'Mois', value: 'month', disabled: true }]"
  />
</template>
vue
<script>
export default {
  data() {
    return { seg: 'day' }
  },
}
</script>

<template>
  <LhSegmented
    v-model="seg"
    block
    :options="[{ label: 'Jour', value: 'day' }, { label: 'Semaine', value: 'week' }, { label: 'Mois', value: 'month', disabled: true }]"
  />
</template>

La prop disabled au niveau du composant désactive l'ensemble du sélecteur.

Sélecteur entièrement désactivé
vue
<script setup>
import { ref } from 'vue'
const segDisabled = ref('A')
</script>

<template>
  <LhSegmented
    v-model="segDisabled"
    disabled
    :options="['A', 'B', 'C']"
  />
</template>
vue
<script>
export default {
  data() {
    return { segDisabled: 'A' }
  },
}
</script>

<template>
  <LhSegmented
    v-model="segDisabled"
    disabled
    :options="['A', 'B', 'C']"
  />
</template>

API ​

LhSegmented Props ​

PropDescriptionTypeValeur par défaut
modelValueValeur actuelle (v-model contrôlé)string | number—
optionsOptions (forme courte par chaîne ou objet)[LhSegmentedInput](#type-LhSegmentedInput)[]—
disabledDésactiver tout le sélecteurbooleanfalse
blockRemplir le conteneurbooleanfalse
sxProps de mise en page sxLhSxProps—

Events ​

ÉvénementDescriptionCallback
update:modelValueÉmis lorsque la sélection change, à utiliser avec v-model(value: string | number)
changeÉmis lorsque la sélection change (clic et flèches directionnelles)(value: string | number)

Accessibilité ​

  • role="radiogroup" + role="radio" pour les options + aria-checked
  • Roving tabindex : déplacement par flèches directionnelles (les éléments désactivés sont ignorés, boucle premier/dernier), Tab n'atteint que l'élément portant le focus
  • Le fond de l'élément sélectionné passe par une transition de variables CSS

Définitions de types ​

Ce composant exporte les structures de types TypeScript suivantes (extraites automatiquement de packages/components/segmented/src/types.ts et des sources @lh-ui/share/core/* ; cliquez sur chaque entrée pour déplier la définition complète ; la description des props se trouve dans le tableau Props ci-dessus) :

LhSegmentedProps
ts
export interface LhSegmentedProps {
  /** Valeur actuelle (v-model contrôlé) */
  modelValue?: LhSegmentedValue
  /** Options (forme courte par chaîne ou objet) */
  options: LhSegmentedInput[]
  disabled?: boolean
  /** Remplir le conteneur */
  block?: boolean
  /** Props de mise en page sx */
  sx?: LhSxProps
}
LhSegmentedValue (provenant de @lh-ui/share/core/segmented)
ts
/** Type de la valeur d'une option */
export type LhSegmentedValue = string | number
LhSegmentedInput (provenant de @lh-ui/share/core/segmented)
ts
/** Option en entrée (forme courte par chaîne ou objet) */
export type LhSegmentedInput = LhSegmentedValue | LhSegmentedOption
LhSegmentedOption (provenant de @lh-ui/share/core/segmented)
ts
/** Forme objet d'une option */
export interface LhSegmentedOption {
  label: string
  value: LhSegmentedValue
  disabled?: boolean
}

La beauté de la tradition, la fondation du code