Модификаторы событий
Очень часто возникает необходимость вызывать event.preventDefault()
или event.stopPropagation()
в обработчике события. Несмотря на то, что это легко сделать внутри метода, лучше сохранять чистоту логики и абстрагироваться от деталей реализации событий DOM.
Для решения этой задачи Vue предоставляет модификаторы событий для v-on
, которые указываются как постфиксы и отделяются точкой:
.stop
.prevent
.capture
.self
.once
.passive
<!-- событие click не будет всплывать дальше -->
<a v-on:click.stop="doThis"></a>
<!-- событие submit больше не будет перезагружать страницу -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- модификаторы можно объединять в цепочки -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- и использовать без указания метода-обработчика -->
<form v-on:submit.prevent></form>
<!-- можно отслеживать события в режиме capture, т.е. событие, нацеленное -->
<!-- на внутренний элемент, обрабатывается здесь до обработки этим элементом -->
<div v-on:click.capture="doThis">...</div>
<!-- вызов обработчика только в случае наступления события непосредственно -->
<!-- на данном элементе (то есть не на дочернем компоненте) -->
<div v-on:click.self="doThat">...</div>
При использовании модификаторов порядок имеет значение, потому что код генерируется в том же порядке. Поэтому v-on:click.prevent.self
будет предотвращать все клики, в то время как v-on:click.self.prevent
будет предотвращать клики только на самом элементе.
<!-- Событие click сработает только 1 раз -->
<a v-on:click.once="doThis"></a>
В отличие от остальных модификаторов, которые поддерживают только нативные события DOM, модификатор .once
может использоваться и в пользовательских событиях компонентов.
Vue также предоставляет модификатор .passive
, соответствующий опции passive
в addEventListener
.
<!-- по умолчанию событие scroll (при прокрутке) произойдёт -->
<!-- незамедлительно, вместо ожидания окончания `onScroll` -->
<!-- на случай, если там будет `event.preventDefault()` -->
<div v-on:scroll.passive="onScroll">...</div>
Модификатор .passive
особенно полезен для повышения производительности на мобильных устройствах.
Не нужно использовать вместе .passive
и .prevent
, потому что .prevent
будет проигнорирован и браузер возможно покажет предупреждение.
.passive
сообщает браузеру, что вы не хотите предотвращать поведение по умолчанию для события.
Last updated
Was this helpful?