# Выпадающее меню

Разворачивающееся вниз меню. Три способа вызова: наведение, клик, правый клик; пункты могут нести командный идентификатор и разделитель.

Выпадающее меню
<template>
  <div class="demo-col" style="padding: 40px 0">
    <div class="demo-row" style="gap: 24px; flex-wrap: wrap; justify-content: center">
      <LhDropdown placement="bottom-start" @command="onCommand">
        <LhButton>Вызов hover (по умолчанию)</LhButton>
        <template #dropdown>
          <LhDropdownItem command="copy">Копировать колофон</LhDropdownItem>
          <LhDropdownItem command="move">Переместить в свиток</LhDropdownItem>
          <LhDropdownItem divided command="delete">Удалить</LhDropdownItem>
        </template>
      </LhDropdown>
      <LhDropdown trigger="click" placement="bottom" :max-height="180" @command="onCommand">
        <LhButton>click + maxHeight</LhButton>
        <template #dropdown>
          <LhDropdownItem v-for="i in 8" :key="i" :command="'item-' + i">Пункт {{ i }}</LhDropdownItem>
        </template>
      </LhDropdown>
      <LhDropdown trigger="contextmenu" placement="bottom-end" @command="onCommand">
        <LhButton>Вызов правым кликом</LhButton>
        <template #dropdown>
          <LhDropdownItem command="ctx-a">Контекстное меню A</LhDropdownItem>
          <LhDropdownItem command="ctx-b" disabled>Контекстное меню B (отключено)</LhDropdownItem>
        </template>
      </LhDropdown>
    </div>
    <p class="demo-note">Команда: {{ command || '(нет)' }}</p>
    <p class="demo-note">При hideOnClick=false клик по пункту меню не сворачивает его; :visible.sync — ручное управление; flip=false — строгое позиционирование.</p>
    <div class="demo-row" style="gap: 24px; flex-wrap: wrap; justify-content: center">
      <LhDropdown :hide-on-click="false" placement="top" @command="onCommand">
        <LhButton>hideOnClick=false</LhButton>
        <template #dropdown>
          <LhDropdownItem command="keep-1">Не сворачивается после клика</LhDropdownItem>
          <LhDropdownItem command="keep-2">Второй пункт</LhDropdownItem>
        </template>
      </LhDropdown>
      <LhDropdown :visible.sync="manual" placement="top-start" :flip="false" popper-class="my-popper">
        <LhButton @click="manual = !manual">Ручной переключатель ({{ manual ? 'вкл' : 'выкл' }})</LhButton>
        <template #dropdown>
          <LhDropdownItem command="manual-1">Пункт ручного меню</LhDropdownItem>
        </template>
      </LhDropdown>
      <LhDropdown disabled>
        <LhButton disabled>disabled</LhButton>
        <template #dropdown>
          <LhDropdownItem command="never">Не появится</LhDropdownItem>
        </template>
      </LhDropdown>
    </div>
  </div>
</template>

<script>
export default {
  data: () => ({
    command: '',
    manual: false,
  }),
  methods: {
    onCommand(cmd) {
      this.command = String(cmd)
    },
  },
}
</script>

# Props

Проп Описание Тип По умолчанию
trigger Способ вызова 'hover' \| 'click' \| 'contextmenu' 'hover'
placement Позиция отображения 'top' \| 'top-start' \| 'top-end' \| 'bottom' \| 'bottom-start' \| 'bottom-end' \| 'left' \| 'left-start' \| 'left-end' \| 'right' \| 'right-start' \| 'right-end' 'bottom'
flip Переворачивать ли направление при нехватке места по главной оси (по умолчанию включено); при false — строго по placement с возможным переполнением окна просмотра boolean true
visible Состояние отображения при ручном управлении (:visible.sync) boolean —
disabled Отключено boolean false
hideOnClick Автозакрытие после клика по пункту меню boolean true
teleportTarget Целевой узел монтирования всплывающего слоя (селектор или элемент; по умолчанию body; в 2.7 нет Teleport — реализовано перемещением узла) string \| HTMLElement —
popperClass Пользовательское имя класса всплывающего слоя string —
maxHeight Максимальная высота меню string \| number —
themeVars Переменные темы на уровне компонента; переопределяют конфигурацию ConfigProvider Record<string, string> —
bgPattern Фоновый узор на уровне компонента; переопределяет конфигурацию ConfigProvider string —
sx Сокращённая запись разметки через sx (применяется к корневому элементу триггера) — —
Проп Описание Тип По умолчанию
command Командный идентификатор; выбрасывается с событием command при клике string \| number —
disabled Отключено (сохраняется возможность фокуса, чтобы оставаться в дереве доступности) boolean false
divided Показывать разделитель boolean false

# Events

Событие Описание Параметр колбэка
command Клик по пункту меню command этого пункта
visible-change Изменение состояния видимости boolean

# Slots

Слот Описание
default Триггер
dropdown Содержимое меню (здесь размещаются LhDropdownItem)

Copyright © 2024-2026 FengMo WenXue