Skip to content
API 风格:

Segmented 세그먼트 선택기 ​

상호 배타적인 옵션 전환, 뷰 전환기 시나리오.

기본 사용법 ​

기본 사용법
vue
<script setup>
import { ref } from 'vue'
const view = ref('목록')
</script>

<template>
  <LhSegmented v-model="view" :options="['목록', '카드', '표']" />
</template>
vue
<script>
export default {
  data() {
    return { view: '목록' }
  },
}
</script>

<template>
  <LhSegmented v-model="view" :options="['목록', '카드', '표']" />
</template>

비활성화 항목과 block ​

비활성화 항목
vue
<script setup>
import { ref } from 'vue'
const seg = ref('day')
</script>

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

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

컴포넌트 수준의 disabled로 선택기 전체를 비활성화합니다.

전체 그룹 비활성화
vue
<script setup>
import { ref } from 'vue'
const segDisabled = ref('갑')
</script>

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

<template>
  <LhSegmented
    v-model="segDisabled"
    disabled
    :options="['갑', '을', '병']"
  />
</template>

API ​

LhSegmented Props ​

프로퍼티설명타입기본값
modelValue현재 값(제어되는 v-model)string | number—
options옵션(문자열 간편 표기 또는 객체)[LhSegmentedInput](#type-LhSegmentedInput)[]—
disabled전체 그룹 비활성화booleanfalse
block컨테이너 꽉 채우기booleanfalse
sxsx 빠른 레이아웃 속성LhSxProps—

Events ​

이벤트설명콜백 매개변수
update:modelValue선택 항목이 변경될 때 발생, v-model과 함께 사용(value: string | number)
change선택 항목이 변경될 때 발생(클릭과 방향키 모두 발생)(value: string | number)

접근성 ​

  • role="radiogroup" + 옵션 role="radio" + aria-checked
  • roving tabindex: 방향키 이동(비활성화 항목 건너뛰기, 양끝 순환), 포커스 위치에서만 Tab 가능
  • 선택 배경색은 CSS 변수 전환으로 처리

타입 정의 ​

이 컴포넌트가 외부로 노출하는 TypeScript 타입 구조는 다음과 같습니다(packages/components/segmented/src/types.ts와 @lh-ui/share/core/* 소스에서 자동 추출, 각 항목을 클릭하여 전체 정의를 펼쳐 볼 수 있습니다; 프로퍼티 설명은 위쪽 Props 표를 참고하세요):

LhSegmentedProps
ts
export interface LhSegmentedProps {
  /** 현재 값(제어되는 v-model) */
  modelValue?: LhSegmentedValue
  /** 옵션(문자열 간편 표기 또는 객체) */
  options: LhSegmentedInput[]
  disabled?: boolean
  /** 컨테이너 꽉 채우기 */
  block?: boolean
  /** 빠른 레이아웃 속성 */
  sx?: LhSxProps
}
LhSegmentedValue (출처: @lh-ui/share/core/segmented)
ts
/** 옵션 값 타입 */
export type LhSegmentedValue = string | number
LhSegmentedInput (출처: @lh-ui/share/core/segmented)
ts
/** 입력 옵션(문자열 간편 표기 또는 객체) */
export type LhSegmentedInput = LhSegmentedValue | LhSegmentedOption
LhSegmentedOption (출처: @lh-ui/share/core/segmented)
ts
/** 옵션 객체 형태 */
export interface LhSegmentedOption {
  label: string
  value: LhSegmentedValue
  disabled?: boolean
}

국풍의 아름다움으로 코드의 토대를 세웁니다