1.С модификаторами событий
Если вы полагаетесь на event
s, вы можете попробовать связать с модификаторами событий и отсортировать их в цепочке.Что-то вроде:
<a @click.stop="doThis" @click.right="showContextMenu"></a>
2.Прикрепление событий программно
Или, вы можете создать свой список событий и их соответствующих реализаций для присоединения и выполнить цикл с v-on
, обходной путь от этого поста :
created() {
const EVENTS = [
{name: 'my-event1', callback: () => console.log('event1')},
{name: 'my-event2', callback: () => console.log('event2')},
{name: 'my-event3', callback: () => console.log('event3')}
]
for (let e of EVENTS) {
this.$on(e.name, e.callback); // Add event listeners
}
}
<button @click="$emit('my-event1')">Raise event1</button>
<button @click="$emit('my-event2')">Raise event2</button>
<button @click="$emit('my-event3')">Raise event3</button>
3.v-on
несколько значений
В противном случае, точно так же, как вы можете сделать v-bind
для нескольких значений , вы можете сделать то же самое с v-on
для событий.
<div id="mydDiv" v-on="handlers"></div>
// ...
data() {
const vm = this;
return {
handlers: {
mousedown: vm.divMousedown,
touchstart: vm.divTouchstart
}
}
},
methods: {
divMousedown() {
console.log('event: mousedown');
},
divTouchstart() {
console.log('event: touched');
}
}
Если вам нужно разбить обработчики по типу события, попробуйте проверить type
во время запуска события , так что в вашем случае, так как touchstart
, похоже, такжетриггер mousedown
, возможно:
methods: {
onTouched(evt) {
evt.preventDefault();
if (evt.type === 'mousedown') {
// handle mousedown
}
else if (evt.type === 'touchstart') {
// ...
}
}
}
Примечание : Возможно, вы захотите позвонить preventDefault()
на touchmove
, а не touchstart
.Таким образом, события мыши все еще могут срабатывать, и такие вещи, как ссылки, будут продолжать работать.