Компонент v-snackbar в Vuetify предназначен для отображения кратких уведомлений или сообщений пользователю. Он обычно используется для подтверждения действий, показа ошибок или информационных сообщений. v-snackbar появляется поверх интерфейса и может автоматически исчезать через заданный интервал времени или закрываться вручную.
Базовая структура компонента выглядит следующим образом:
<template>
<v-snackbar v-model="snackbar" timeout="3000">
Сообщение успешно отправлено!
<template v-slot:action>
<v-btn color="pink" text @click="snackbar = false">Закрыть</v-btn>
</template>
</v-snackbar>
</template>
<script>
export default {
data() {
return {
snackbar: false
};
}
};
</script>
Ключевые моменты:
v-snackbar поддерживает различные позиции на экране:
bottom, top, left,
right и их комбинации. По умолчанию уведомления появляются
в нижней части экрана, выравниваясь по центру.
<v-snackbar v-model="snackbar" top right>
Сообщение в верхнем правом углу
</v-snackbar>
Для изменения внешнего вида используются стандартные классы Vuetify для цвета:
<v-snackbar v-model="snackbar" color="green darken-1" text-color="white">
Операция выполнена успешно
</v-snackbar>
Важно: color задаёт фон, а
text-color — цвет текста.
Снекбары могут автоматически исчезать через указанный timeout:
<v-snackbar v-model="snackbar" timeout="5000">
Это сообщение исчезнет через 5 секунд
</v-snackbar>
timeout в зависимости от типа сообщения.Через слот action можно добавлять интерактивные
элементы:
<v-snackbar v-model="snackbar" timeout="6000">
Сообщение об ошибке
<template v-slot:action="{ attrs }">
<v-btn color="red" text v-bind="attrs" @click="snackbar = false">
Повторить
</v-btn>
</template>
</v-snackbar>
Слот автоматически наследует необходимые атрибуты для корректного отображения кнопки и доступности.
Vuetify не ограничивает количество снекбаров. Для управления
несколькими уведомлениями можно использовать массив объектов и
динамически рендерить их через v-for:
<template>
<div>
<v-snackbar
v-for="(snack, index) in snacks"
:key="index"
v-model="snack.show"
:timeout="snack.timeout"
:color="snack.color"
>
{{ snack.message }}
<template v-slot:action>
<v-btn text @click="snack.show = false">Закрыть</v-btn>
</template>
</v-snackbar>
</div>
</template>
<script>
export default {
data() {
return {
snacks: [
{ message: 'Ошибка загрузки', color: 'red', show: false, timeout: 4000 },
{ message: 'Данные сохранены', color: 'green', show: false, timeout: 3000 }
]
};
}
};
</script>
Для крупных приложений удобно управлять снекбарами через глобальное состояние. Например, с Vuex можно хранить массив сообщений, а компонент снекбаров будет подписан на изменения:
computed: {
snacks() {
return this.$store.state.snacks;
}
}
Каждое уведомление автоматически рендерится и исчезает после timeout, обеспечивая единый стиль и поведение для всех сообщений приложения.
v-snackbar поддерживает стандартные Vuetify анимации через компонент v-fade-transition или v-slide-x-transition:
<v-slide-y-transition>
<v-snackbar v-if="snackbar" v-model="snackbar">
Сообщение с анимацией
</v-snackbar>
</v-slide-y-transition>
Это позволяет визуально подчеркнуть появление уведомления без дополнительного CSS.
Эти практики повышают удобство использования интерфейса и делают уведомления информативными, но ненавязчивыми.