QBtnDropdown — это компонент из Quasar Framework,
объединяющий кнопку (QBtn) и выпадающее меню
(QMenu) в единую сущность. Он используется для реализации
компактных интерфейсных решений, где действия сгруппированы и доступны
по клику.
Компонент особенно полезен в ситуациях:
Минимальная реализация включает кнопку с выпадающим списком:
<q-btn-dropdown label="Опции">
<q-list>
<q-item clickable v-close-popup>
<q-item-section>Действие 1</q-item-section>
</q-item>
<q-item clickable v-close-popup>
<q-item-section>Действие 2</q-item-section>
</q-item>
</q-list>
</q-btn-dropdown>
label — текст кнопкиq-list — контейнер элементов менюq-item — отдельный пунктv-close-popup — директива для автоматического закрытия
менюКомпонент поддерживает как внутреннее, так и внешнее управление состоянием.
v-model<q-btn-dropdown v-model="opened" label="Меню">
...
</q-btn-dropdown>
export default {
data() {
return {
opened: false
}
}
}
true — меню открытоfalse — меню закрытоQBtnDropdown наследует свойства QBtn.
<q-btn-dropdown
label="Настройки"
color="primary"
icon="settings"
flat
rounded
/>
flat, outline,
unelevatedrounded, densecolor, text-colorМожно полностью переопределить содержимое кнопки через слот
label:
<q-btn-dropdown>
<template v-slot:label>
<q-icon name="menu" />
Меню
</template>
<q-list>
...
</q-list>
</q-btn-dropdown>
Меню (QMenu внутри) поддерживает гибкое
позиционирование.
<q-btn-dropdown
label="Меню"
anchor="bottom right"
self="top right"
/>
anchor — точка привязки к кнопкеself — точка меню<q-list>
<q-item clickable>
<q-item-section>Профиль</q-item-section>
</q-item>
<q-separator />
<q-item clickable>
<q-item-section>Выход</q-item-section>
</q-item>
</q-list>
q-separator — визуальное разделениеq-list<q-item clickable>
<q-item-section avatar>
<q-icon name="person" />
</q-item-section>
<q-item-section>Профиль</q-item-section>
</q-item>
<q-btn-dropdown @show="onShow" @hide="onHide">
methods: {
onShow() {
console.log('Открыто')
},
onHide() {
console.log('Закрыто')
}
}
Меню создаётся только при открытии:
<q-btn-dropdown lazy>
<q-item clickable to="/profile">
<q-item-section>Профиль</q-item-section>
</q-item>
Работает через интеграцию с Vue Router.
<q-item clickable @click="loadData">
<q-item-section>Загрузить</q-item-section>
</q-item>
methods: {
async loadData() {
await fetchData()
}
}
<q-btn-dropdown disable label="Недоступно" />
или
<q-item clickable disable>
<q-item-section>Недоступный пункт</q-item-section>
</q-item>
<q-item clickable>
<q-item-section>Дополнительно</q-item-section>
<q-menu>
<q-list>
<q-item clickable>
<q-item-section>Подпункт</q-item-section>
</q-item>
</q-list>
</q-menu>
</q-item>
Меню может содержать любые компоненты:
<q-btn-dropdown label="Фильтр">
<div class="q-pa-md">
<q-input label="Поиск" />
<q-btn label="Применить" />
</div>
</q-btn-dropdown>
v-close-popup — стандартное решениеv-model<q-toolbar>
<q-btn-dropdown icon="more_vert" flat>
<q-list>
<q-item clickable>
<q-item-section>Экспорт</q-item-section>
</q-item>
</q-list>
</q-btn-dropdown>
</q-toolbar>
Компонент корректно работает на мобильных устройствах:
QMenu адаптивным поведениемРекомендации:
lazyОтсутствие v-close-popup:
Сложная вложенность:
Использование без q-list:
<q-btn-dropdown icon="account_circle" flat>
<q-list>
<q-item clickable>
<q-item-section>Профиль</q-item-section>
</q-item>
<q-item clickable>
<q-item-section>Выход</q-item-section>
</q-item>
</q-list>
</q-btn-dropdown>
<q-btn-dropdown label="Действия" color="secondary">
<q-list>
<q-item clickable>
<q-item-section>Редактировать</q-item-section>
</q-item>
<q-item clickable>
<q-item-section>Удалить</q-item-section>
</q-item>
</q-list>
</q-btn-dropdown>
QTooltiptransition-show /
transition-hidethis.$refs.dropdown.show()
this.$refs.dropdown.hide()
QBtnDropdown — это обёртка над:
QBtnQMenuЭто означает:
| Компонент | Назначение |
|---|---|
| QBtnDropdown | Кнопка + меню |
| QMenu | Универсальное меню |
| QSelect | Выбор значения |
Часто используется совместно с:
QToolbarQTableQCardQLayoutЭто позволяет создавать гибкие и масштабируемые интерфейсы.