Skip to content
API 风格:

Оценка ​

Звёздный рейтинг: отображение только для чтения / интерактивная оценка / половина звезды / пользовательские символы и количество.

Базовое использование ​

Базовое использование
vue
<script setup>
import { ref } from 'vue'
const rate1 = ref(3)
</script>

<template>
  <LhRate v-model="rate1" />
</template>
vue
<script>
export default {
  data() {
    return { rate1: 3 }
  },
}
</script>

<template>
  <LhRate v-model="rate1" />
</template>

Половина звезды и только чтение ​

Половина звезды / только чтение
vue
<script setup>
import { ref } from 'vue'
const rate2 = ref(3.5)
</script>

<template>
  <div class="demo-rate-row">
    <LhRate v-model="rate2" allow-half />
    <LhRate :model-value="4.5" readonly allow-half show-score />
  </div>
</template>
vue
<script>
export default {
  data() {
    return { rate2: 3.5 }
  },
}
</script>

<template>
  <div class="demo-rate-row">
    <LhRate v-model="rate2" allow-half />
    <LhRate :model-value="4.5" readonly allow-half show-score />
  </div>
</template>

max задаёт общее количество звёзд, disabled отключает взаимодействие, character задаёт пользовательский символ оценки.

Настройка
vue
<script setup>
import { ref } from 'vue'
const rate3 = ref(8)
const rate4 = ref(3)
const rate5 = ref(4)
</script>

<template>
  <div class="demo-rate-row">
    <LhRate v-model="rate3" :max="10" />
    <LhRate v-model="rate4" disabled />
    <LhRate v-model="rate5" character="А" />
  </div>
</template>
vue
<script>
export default {
  data() {
    return { rate3: 8, rate4: 3, rate5: 4 }
  },
}
</script>

<template>
  <div class="demo-rate-row">
    <LhRate v-model="rate3" :max="10" />
    <LhRate v-model="rate4" disabled />
    <LhRate v-model="rate5" character="А" />
  </div>
</template>

API ​

LhRate Props ​

СвойствоОписаниеТипПо умолчанию
modelValueТекущая оценка (контролируемый v-model)number0
maxМаксимальное количество звёздnumber5
allowHalfРазрешить половину звездыbooleanfalse
readonlyТолько чтение (выводит текстовое значение звёзд для скринридера)booleanfalse
disabledОтключёнbooleanfalse
characterПользовательский символstring—
showScoreПоказывать текст с оценкойbooleanfalse
scoreTemplateШаблон оценки (плейсхолдер {n})string—
sxСвойства быстрой разметки sxLhSxProps—

Events ​

СобытиеОписаниеПараметры обратного вызова
update:modelValueСрабатывает при изменении оценки, используется с v-model(value: number)
changeСрабатывает при изменении оценки (и при клике, и с клавиатуры)(value: number)

Доступность ​

  • В интерактивном состоянии имеет role="radiogroup", каждая звезда — настоящая фокусируемая кнопка (roving tabindex), оценка меняется стрелками, Home/End — обнуление / максимум
  • В режиме половины звезды шаг с клавиатуры равен 0.5
  • В состоянии только для чтения выводится role="img" + aria-label="n звёзд" для скринридера
  • Кольцо фокуса через :focus-visible

Определения типов ​

Структуры TypeScript, экспортируемые этим компонентом (автоматически извлечены из packages/components/rate/src/types.ts и исходников @lh-ui/share/core/*; нажмите на каждый пункт, чтобы развернуть полное определение; описания свойств см. в таблице Props выше):

LhRateProps
ts
export interface LhRateProps {
  /** Текущая оценка (контролируемый v-model) */
  modelValue?: number
  /** Максимальное количество звёзд */
  max?: number
  /** Разрешить половину звезды */
  allowHalf?: boolean
  /** Только чтение (выводит текстовое значение звёзд для скринридера) */
  readonly?: boolean
  disabled?: boolean
  /** Пользовательский символ (по умолчанию ★) */
  character?: string
  /** Показывать текст с оценкой */
  showScore?: boolean
  /** Шаблон оценки (плейсхолдер {n}) */
  scoreTemplate?: string
  /** Свойства быстрой разметки sx */
  sx?: LhSxProps
}

Константы ​

Публичные константы, используемые этим компонентом (в столбцах «Тип / По умолчанию» таблицы Props можно перейти к одноимённой записи):

LH_RATE_MAX_DEFAULT (из @lh-ui/share/core/rate)
ts
/** Количество звёзд по умолчанию */
export const LH_RATE_MAX_DEFAULT = 5

Красота традиций — основа кода