# Menú desplegable

Lista de menú que se despliega hacia abajo. Tres formas de invocación — al pasar el cursor, al hacer clic y con el botón derecho —; los elementos del menú pueden llevar un identificador de comando y una línea divisoria.

Menú desplegable
<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>Invocación con hover (predeterminada)</LhButton>
        <template #dropdown>
          <LhDropdownItem command="copy">Copiar el colofón</LhDropdownItem>
          <LhDropdownItem command="move">Mover al rollo</LhDropdownItem>
          <LhDropdownItem divided command="delete">Eliminar</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">Opción {{ i }}</LhDropdownItem>
        </template>
      </LhDropdown>
      <LhDropdown trigger="contextmenu" placement="bottom-end" @command="onCommand">
        <LhButton>Invocación con el botón derecho</LhButton>
        <template #dropdown>
          <LhDropdownItem command="ctx-a">Menú contextual A</LhDropdownItem>
          <LhDropdownItem command="ctx-b" disabled>Menú contextual B (deshabilitado)</LhDropdownItem>
        </template>
      </LhDropdown>
    </div>
    <p class="demo-note">Comando: {{ command || '(ninguno)' }}</p>
    <p class="demo-note">Con hideOnClick=false, hacer clic en un elemento no cierra el menú; :visible.sync permite el control manual; con flip=false la posición es estricta.</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">No se cierra tras el clic</LhDropdownItem>
          <LhDropdownItem command="keep-2">Segundo elemento</LhDropdownItem>
        </template>
      </LhDropdown>
      <LhDropdown :visible.sync="manual" placement="top-start" :flip="false" popper-class="my-popper">
        <LhButton @click="manual = !manual">Interruptor manual ({{ manual ? 'abierto' : 'cerrado' }})</LhButton>
        <template #dropdown>
          <LhDropdownItem command="manual-1">Elemento manual</LhDropdownItem>
        </template>
      </LhDropdown>
      <LhDropdown disabled>
        <LhButton disabled>disabled</LhButton>
        <template #dropdown>
          <LhDropdownItem command="never">Nunca aparece</LhDropdownItem>
        </template>
      </LhDropdown>
    </div>
  </div>
</template>

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

# Props

Prop Descripción Tipo Predeterminado
trigger Forma de invocación 'hover' \| 'click' \| 'contextmenu' 'hover'
placement Posición de aparición 'top' \| 'top-start' \| 'top-end' \| 'bottom' \| 'bottom-start' \| 'bottom-end' \| 'left' \| 'left-start' \| 'left-end' \| 'right' \| 'right-start' \| 'right-end' 'bottom'
flip Si se voltea la dirección cuando falta espacio en el eje principal (activado por defecto); con false se respeta estrictamente placement y se permite desbordar la ventana gráfica boolean true
visible Visibilidad controlada manualmente (:visible.sync) boolean —
disabled Si se deshabilita boolean false
hideOnClick Si se cierra automáticamente al hacer clic en un elemento boolean true
teleportTarget Destino de montaje de la capa emergente (selector o elemento; body por defecto. Vue 2.7 no tiene Teleport: se implementa moviendo el anfitrión) string \| HTMLElement —
popperClass Clase personalizada de la capa emergente string —
maxHeight Altura máxima del menú string \| number —
themeVars Variables de tema a nivel de componente; anula la configuración de ConfigProvider Record<string, string> —
bgPattern Patrón de fondo a nivel de componente; anula la configuración de ConfigProvider string —
sx Propiedades de layout abreviadas (se aplican al elemento raíz del disparador) — —
Prop Descripción Tipo Predeterminado
command Identificador del comando; se emite con el evento command al hacer clic string \| number —
disabled Si se deshabilita (conserva la capacidad de recibir el foco para permanecer en el árbol de accesibilidad) boolean false
divided Si se muestra la línea divisoria boolean false

# Events

Evento Descripción Parámetro del callback
command Al hacer clic en un elemento del menú El command de ese elemento
visible-change Cambio del estado de visibilidad boolean

# Slots

Slot Descripción
default Disparador
dropdown Contenido del menú (aquí van los LhDropdownItem)

Copyright © 2024-2026 FengMo WenXue