Вы можете достичь этого, используя args
или modifiers
в своей пользовательской директиве vue.
Чтобы использовать эти ловушки, вам нужно посмотреть на параметр binding
директивы.Этот параметр включает в себя целый набор свойств , которые вы можете использовать, чтобы испечь свою пользовательскую директиву.
В вашем случае вы захотите поискать либо binding.modifier
, либо binding.arg
в зависимостив желаемой HTML-структуре:
Разметка аргумента: <img v-example-directive:mouseup>
Разметка модификатора: <img v-example-directive.mouseup>
Теперь, когда вы добавили "flag ", вы можете проверить это в директиве:
Vue.directive('example-directive', {
bind(el, binding) {
if (binding.arg == 'mouseup') {} // Using argument markup
if (binding.modifiers.mouseup) {} // Using modifier markup
}
})
Пример:
Vue.directive('example-directive', {
bind(el, binding) {
if (binding.arg == 'mousedown') { // Check by argument given to directive
el.addEventListener("mousedown", () => {
binding.value() // The function provided by the directive
});
}else if (binding.modifiers.mouseup) { //check by modifier
el.addEventListener("mouseup", () => {
binding.value()
});
}
}
})
let x = new Vue({
el:"#app",
methods: {
clicked() {
console.log("clicked")
}
}
})
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
<div id="app">
<button v-example-directive:mousedown="clicked">mousedown</button>
<button v-example-directive.mouseup="clicked">mouseup</button>
<!-- ... -->
</div>