Petite-Vue, облегчённая альтернатива Vue.js, сохраняет большинство концепций реактивности и управления событиями. Одной из важных особенностей работы с событиями являются модификаторы событий, позволяющие управлять поведением обработчиков без необходимости писать лишний код.
Модификаторы в Petite-Vue применяются к директиве @event
через точку после имени события: @click.stop,
@submit.prevent и т.д. Они изменяют стандартное поведение
браузера или поток событий.
Примеры ключевых модификаторов:
stop — останавливает распространение события (event
propagation).prevent — предотвращает стандартное поведение
браузера.self — срабатывает только если событие инициировано на
текущем элементе, а не на его потомках.once — обработчик выполняется только один раз.capture — слушает событие на фазе захвата.passive — указывает, что обработчик не будет вызывать
preventDefault(), оптимизация для скроллинга и жестов.<div @click.stop="handleClick">Клик с остановкой всплытия</div>
<form @submit.prevent="handleSubmit">
<button type="submit">Отправить</button>
</form>
<button @click.once="handleOnce">Нажать один раз</button>
stopМодификатор stop эквивалентен вызову
event.stopPropagation() внутри обработчика. Он
предотвращает всплытие события вверх по дереву DOM.
<div @click="parentClick">
Родитель
<button @click.stop="childClick">Дочерняя кнопка</button>
</div>
<script>
const app = {
parentClick() { console.log('Родитель'); },
childClick() { console.log('Дочерний'); }
}
PetiteVue.createApp(app).mount()
</script>
При клике на кнопку будет выведено только 'Дочерний',
потому что всплытие остановлено.
preventprevent предотвращает стандартное поведение браузера.
Обычно используется с формами и ссылками.
<a href="https://example.com" @click.prevent="linkClick">Ссылка</a>
<script>
const app = {
linkClick() { console.log('Ссылка кликнута'); }
}
PetiteVue.createApp(app).mount()
</script>
Событие не приведёт к переходу по ссылке, но вызовет обработчик
linkClick.
selfself срабатывает только если событие произошло на самом
элементе, игнорируя потомков.
<div @click.self="parentOnlyClick">
Родитель
<button>Кнопка</button>
</div>
<script>
const app = {
parentOnlyClick() { console.log('Клик по родителю'); }
}
PetiteVue.createApp(app).mount()
</script>
Клик по кнопке внутри div не вызовет обработчик
parentOnlyClick.
onceonce гарантирует выполнение обработчика один раз, после
чего он автоматически удаляется.
<button @click.once="sayHello">Привет</button>
<script>
const app = {
sayHello() { console.log('Привет!'); }
}
PetiteVue.createApp(app).mount()
</script>
Любые последующие клики будут игнорироваться.
capture и passivecapture переводит событие в фазу захвата, срабатывая до
того, как событие дойдёт до целевого элемента.passive используется для оптимизации скроллинга и
жестов, предотвращая блокировку основного потока браузера.<div @scroll.passive="onScroll">Скролл контейнера</div>
<script>
const app = {
onScroll(e) { console.log('Скролл', e); }
}
PetiteVue.createApp(app).mount()
</script>
passive гарантирует, что вызов
preventDefault() внутри onScroll вызовет
предупреждение, но увеличит производительность.
Модификаторы можно комбинировать, перечисляя их через точку:
<button @click.stop.prevent.once="handleClick">Комбинированный клик</button>
Здесь:
stop — предотвращает всплытие,prevent — предотвращает стандартное действие,once — срабатывает только один раз.Petite-Vue позволяет использовать модификаторы и с пользовательскими
событиями. Важно, чтобы события были инициированы через
$emit:
<child @custom-event.prevent="handleCustom"></child>
<script>
const app = {
handleCustom() { console.log('Поймано кастомное событие'); }
}
PetiteVue.createApp(app).mount()
</script>
Внутри компонента child событие
custom-event может быть вызвано через
this.$emit('custom-event'), и модификатор
prevent будет корректно применён.
Модификаторы событий в Petite-Vue обеспечивают компактный и декларативный способ управления поведением обработчиков, позволяя сократить количество кода и улучшить читаемость приложений. Они поддерживают большинство сценариев, характерных для интерактивных интерфейсов, включая предотвращение стандартного поведения, управление всплытием и однократное выполнение событий.