В Vue.js взаимодействие с пользователем осуществляется через
обработку событий. Для связывания событий DOM с методами компонента
используется директива v-on. Она позволяет реагировать на
действия пользователя, такие как клики, ввод текста, наведение мыши и
другие стандартные события браузера.
v-onДиректива v-on имеет синтаксис:
<button v-on:click="handleClick">Нажми меня</button>
Здесь:
click — тип события.handleClick — метод, определённый в объекте
methods компонента:export default {
methods: {
handleClick() {
console.log('Кнопка нажата');
}
}
}
Для удобства v-on можно сокращать с помощью символа
@:
<button @click="handleClick">Нажми меня</button>
Метод обработчика может принимать аргументы. Это делается следующим образом:
<button @click="greet('Привет')">Поздороваться</button>
export default {
methods: {
greet(message) {
console.log(message);
}
}
}
Если требуется передать объект события в метод, его можно явно
указать через $event:
<button @click="showEvent($event)">Событие</button>
export default {
methods: {
showEvent(event) {
console.log(event.type); // click
}
}
}
Vue.js предоставляет специальные модификаторы для событий, которые упрощают управление поведением DOM.
Основные модификаторы:
.stop — предотвращает всплытие события:<button @click.stop="handleClick">Не всплывать</button>
.prevent — предотвращает стандартное поведение
браузера:<form @submit.prevent="submitForm">
<button type="submit">Отправить</button>
</form>
.capture — захватывающее прослушивание события на фазе
capture..self — обработчик срабатывает только если событие
инициировано самим элементом:<div @click.self="doSomething">
<button>Клик на кнопке не сработает</button>
</div>
.once — обработчик срабатывает только один раз..passive — указывает браузеру, что событие не будет
вызывать preventDefault, повышая производительность
прокрутки.Модификаторы можно комбинировать:
<button @click.stop.once="handleClick">Однократный клик без всплытия</button>
Для клавиатурных событий используется модификатор с названием клавиши:
<input @keyup.enter="submitForm">
Полезные встроенные ключи:
entertabdeleteescspaceup, down, left,
rightДля нестандартных клавиш можно использовать keyCode:
<input @keyup.13="submitForm">
Директива v-on позволяет вызывать функцию напрямую без
создания метода в компоненте:
<button @click="count += 1">Увеличить счетчик</button>
<p>{{ count }}</p>
export default {
data() {
return {
count: 0
}
}
}
События могут динамически связываться через синтаксис
v-on:[eventName]:
<button v-on:[eventType]="handleEvent">Клик или другое</button>
export default {
data() {
return {
eventType: 'click'
};
},
methods: {
handleEvent() {
console.log('Событие сработало');
}
}
}
Такой подход удобен для создания компонентов с настраиваемой реакцией на события.
Vue.js поддерживает стандартные события мыши: click,
dblclick, mouseenter, mouseleave,
mousemove, mousedown, mouseup.
Для сенсорных устройств используются события touchstart,
touchmove, touchend, которые можно
обрабатывать аналогично обычным событиям.
<div @mousemove="trackMouse">Перемещение мыши</div>
methods: {
trackMouse(event) {
console.log(`Координаты: ${event.clientX}, ${event.clientY}`);
}
}
Обработчики событий имеют доступ к данным и методам компонента через
this, что позволяет изменять состояние компонента и
выполнять комплексные действия:
<button @click="incrementCounter">Добавить</button>
<p>Счетчик: {{ counter }}</p>
export default {
data() {
return {
counter: 0
};
},
methods: {
incrementCounter() {
this.counter++;
}
}
}
Эта система событий делает Vue.js мощным инструментом для построения интерактивных интерфейсов, обеспечивая гибкое управление реакцией на действия пользователя.