Компонент Dropdown Button в библиотеке Naive
UI представляет собой комбинацию кнопки и выпадающего меню,
позволяющего пользователю выбирать действия или опции из списка. Этот
элемент удобно использовать для создания компактных интерфейсов с
множеством связанных функций. В Naive UI он реализуется
через компонент n-dropdown совместно с
n-button и n-dropdown-menu.
Для работы с Dropdown Button необходимо импортировать соответствующие компоненты:
import { NDropdown, NButton, NDropdownMenu, NDropdownOption } from 'naive-ui';
Базовая структура компонента выглядит следующим образом:
<NDropdown>
<template #trigger>
<NButton>Действия</NButton>
</template>
<NDropdownMenu>
<NDropdownOption key="edit">Редактировать</NDropdownOption>
<NDropdownOption key="delete">Удалить</NDropdownOption>
<NDropdownOption key="share">Поделиться</NDropdownOption>
</NDropdownMenu>
</NDropdown>
#trigger — слот для кнопки, по которой открывается
меню.NDropdownOption — отдельные пункты меню.key — уникальный идентификатор для каждого пункта,
используемый при обработке событий.Для реагирования на выбор пункта меню используется событие
onSelect:
<NDropdown @select="handleSelect">
<template #trigger>
<NButton>Действия</NButton>
</template>
<NDropdownMenu>
<NDropdownOption key="edit">Редактировать</NDropdownOption>
<NDropdownOption key="delete">Удалить</NDropdownOption>
<NDropdownOption key="share">Поделиться</NDropdownOption>
</NDropdownMenu>
</NDropdown>
<script>
export default {
methods: {
handleSelect(key) {
switch (key) {
case 'edit':
console.log('Редактирование элемента');
break;
case 'delete':
console.log('Удаление элемента');
break;
case 'share':
console.log('Поделиться элементом');
break;
}
}
}
}
</script>
key передается в обработчик, что позволяет легко
различать выбранные действия.Dropdown Button наследует все свойства стандартной кнопки
n-button. Можно настроить размер,
тип и стиль:
<NDropdown>
<template #trigger>
<NButton type="primary" size="large">Действия</NButton>
</template>
<NDropdownMenu>
<NDropdownOption key="edit">Редактировать</NDropdownOption>
<NDropdownOption key="delete">Удалить</NDropdownOption>
</NDropdownMenu>
</NDropdown>
type — может быть default,
primary, success, warning,
error.size — small, medium,
large.ghost и round для
визуального изменения кнопки.Позицию выпадающего меню регулирует атрибут
placement:
<NDropdown placement="bottom-end">
<template #trigger>
<NButton>Меню</NButton>
</template>
<NDropdownMenu>
<NDropdownOption key="option1">Опция 1</NDropdownOption>
<NDropdownOption key="option2">Опция 2</NDropdownOption>
</NDropdownMenu>
</NDropdown>
Возможные значения placement:
top-start, top, top-endbottom-start, bottom,
bottom-endleft-start, left,
left-endright-start, right,
right-endЭто позволяет гибко управлять положением меню относительно кнопки.
Для более сложных меню можно использовать группы и разделители:
<NDropdown>
<template #trigger>
<NButton>Меню</NButton>
</template>
<NDropdownMenu>
<NDropdownOption key="new">Создать</NDropdownOption>
<NDropdownOption key="open">Открыть</NDropdownOption>
<NDropdownOptionDivider />
<NDropdownOption key="settings">Настройки</NDropdownOption>
<NDropdownOption key="logout">Выход</NDropdownOption>
</NDropdownMenu>
</NDropdown>
NDropdownOptionDivider добавляет визуальное разделение
между группами пунктов.Можно сделать отдельные пункты неактивными с помощью
свойства disabled:
<NDropdownOption key="delete" disabled>Удалить</NDropdownOption>
Также пункты могут рендериться динамически на основе данных:
<NDropdownMenu>
<NDropdownOption
v-for="item in options"
:key="item.key"
:disabled="item.disabled"
>
{{ item.label }}
</NDropdownOption>
</NDropdownMenu>
<script>
export default {
data() {
return {
options: [
{ key: 'edit', label: 'Редактировать', disabled: false },
{ key: 'delete', label: 'Удалить', disabled: true },
]
};
}
}
</script>
В Composition API можно управлять Dropdown Button с помощью реактивных данных и функций:
<script setup>
import { ref } from 'vue';
import { NDropdown, NButton, NDropdownMenu, NDropdownOption } from 'naive-ui';
const options = [
{ key: 'edit', label: 'Редактировать' },
{ key: 'delete', label: 'Удалить' }
];
function handleSelect(key) {
console.log('Выбран пункт:', key);
}
</script>
<template>
<NDropdown @select="handleSelect">
<template #trigger>
<NButton type="primary">Действия</NButton>
</template>
<NDropdownMenu>
<NDropdownOption v-for="item in options" :key="item.key">{{ item.label }}</NDropdownOption>
</NDropdownMenu>
</NDropdown>
</template>
options позволяет
динамически изменять меню.@select обрабатывает все действия
централизованно.По умолчанию меню открывается с плавной анимацией. Управлять
видимостью можно через show и
v-model:show:
<NDropdown v-model:show="isOpen">
<template #trigger>
<NButton @click="isOpen = !isOpen">Меню</NButton>
</template>
<NDropdownMenu>
<NDropdownOption key="option1">Опция 1</NDropdownOption>
</NDropdownMenu>
</NDropdown>
<script setup>
import { ref } from 'vue';
const isOpen = ref(false);
</script>
v-model:show позволяет программно открывать и закрывать
меню.appear и transition
обеспечивает плавное раскрытие.NButton для более
наглядного представления действия.Такое детальное рассмотрение позволяет создавать гибкие и функциональные Dropdown Button, полностью используя возможности Naive UI.