Директива v-on предназначена для привязки обработчиков
событий к DOM-элементам. Она позволяет реагировать на действия
пользователя, такие как клики, ввод текста, наведение курсора и другие
события браузера. Синтаксис максимально схож с Vue, но адаптирован под
минималистичную архитектуру Petite-Vue.
<button v-on:click="increment">Нажми меня</button>
В этом примере к событию click привязывается метод
increment, определённый в объекте состояния. Petite-Vue
автоматически отслеживает изменения и вызывает функцию при возникновении
события.
Для сокращения записи используется синтаксис с @:
<button @click="increment">Нажми меня</button>
Функция-обработчик может принимать аргументы. Например:
<button @click="greet('Мир')">Приветствие</button>
const App = {
greet(name) {
console.log(`Привет, ${name}!`);
}
};
PetiteVue.createApp(App).mount();
В этом случае при клике на кнопку будет вызвана функция
greet с аргументом 'Мир'.
Если требуется информация о самом событии (например, координаты мыши или целевой элемент), можно явно передать объект события:
<button @click="handleClick($event)">Нажми меня</button>
const App = {
handleClick(event) {
console.log(event.type, event.target);
}
};
Переменная $event содержит стандартный объект события
JavaScript.
Petite-Vue поддерживает модификаторы событий, позволяющие изменять поведение без написания дополнительных функций:
.prevent — предотвращает стандартное поведение события
(event.preventDefault())..stop — останавливает всплытие события
(event.stopPropagation())..once — обработчик сработает только один раз..self — обработчик срабатывает только если событие
произошло на самом элементе, а не на его потомках.Примеры использования:
<form @submit.prevent="submitForm">
<button type="submit">Отправить</button>
</form>
<button @click.stop="clickHandler">Клик</button>
<button @click.once="onceHandler">Один раз</button>
Для событий клавиатуры поддерживаются модификаторы
клавиш. Petite-Vue позволяет реагировать на конкретные клавиши
без явного анализа event.key:
<input @keydown.enter="submitForm" placeholder="Нажми Enter">
<input @keydown.esc="cancelForm" placeholder="Нажми Esc">
Список поддерживаемых клавиш: enter, tab,
delete, esc, space,
up, down, left,
right.
Также можно использовать пользовательскую проверку через
$event:
<input @keydown="checkKey($event)">
checkKey(event) {
if (event.key === 'a') {
console.log('Нажата клавиша A');
}
}
Директива v-on позволяет легко обрабатывать различные
события мыши:
<div
@mouseenter="hoverIn"
@mouseleave="hoverOut"
@mousemove="trackMouse"
>
Наведи курсор
</div>
const App = {
hoverIn() {
console.log('Курсор над элементом');
},
hoverOut() {
console.log('Курсор покинул элемент');
},
trackMouse(event) {
console.log(`Координаты: ${event.clientX}, ${event.clientY}`);
}
};
В Petite-Vue разрешены инлайн-выражения прямо в шаблоне. Это удобно для простых вычислений:
<button @click="count++">Увеличить: {{ count }}</button>
Инлайн-выражения могут включать тернарные операции, арифметические вычисления и логические проверки:
<button @click="count = count < 10 ? count + 1 : 0">Счётчик</button>
Для сложной логики рекомендуется использовать методы в объекте состояния для читаемости.
При работе с массивами или динамическим контентом обработчики
подключаются на каждый элемент через v-for:
<ul>
<li v-for="item in items" @click="selectItem(item)">
{{ item.name }}
</li>
</ul>
const App = {
items: [
{ name: 'Элемент 1' },
{ name: 'Элемент 2' }
],
selectItem(item) {
console.log('Выбран', item.name);
}
};
Petite-Vue позволяет вызывать несколько функций в одном обработчике
через оператор , или в виде массива:
<button @click="first(), second()">Клик</button>
const App = {
first() { console.log('Первая функция'); },
second() { console.log('Вторая функция'); }
};
Кроме стандартных DOM-событий, Petite-Vue поддерживает
пользовательские события через dispatchEvent и
CustomEvent:
const button = document.querySelector('button');
button.addEventListener('custom-event', e => console.log(e.detail));
button.dispatchEvent(new CustomEvent('custom-event', { detail: { info: 123 } }));
<button @custom-event="handleCustom">Кнопка</button>
const App = {
handleCustom(event) {
console.log(event.detail.info);
}
};
Это расширяет возможности взаимодействия компонентов и интеграции с внешними библиотеками.
В Petite-Vue директива v-on обеспечивает гибкую и
лаконичную обработку всех типов событий, включая мышь, клавиатуру, формы
и пользовательские события. Модификаторы и инлайн-выражения делают код
компактным, сохраняя его читаемость и предсказуемость поведения.