Аргументы хуков директив — это параметры, которые Vue автоматически передает в каждую функцию-хук при её вызове. Эти аргументы содержат всю необходимую информацию о текущем состоянии директивы и элемента.
Каждый хук директивы получает следующие аргументы:
el (HTMLElement)
binding (Object)
name
: Имя директивы без префикса v-
value
: Значение, переданное директивеoldValue
: Предыдущее значение (доступно только в update
и componentUpdated
)expression
: Строка выражения, переданная директивеarg
: Аргумент, переданный после двоеточия (:`)modifiers
: Объект, содержащий модификаторыvnode (VNode)
vnode.context
можно получить доступ к контексту компонентаoldVnode (VNode)
update
и componentUpdated
){
name: "my-directive", // имя директивы без v-
value: 42, // значение, переданное директиве
oldValue: undefined, // предыдущее значение (в update/componentUpdated)
expression: "'42'", // строка выражения как есть
arg: "foo", // аргумент после двоеточия
modifiers: { // модификаторы
bar: true,
baz: true
}
}
Vue.directive('demo', {
bind(el, binding, vnode) {
// Устанавливаем tooltip на элемент
el.setAttribute('title', binding.value)
// Добавляем класс если есть модификатор large
if (binding.modifiers.large) {
el.classList.add('large-text')
}
// Используем аргумент как тип tooltip
if (binding.arg === 'warning') {
el.style.border = '1px solid red'
}
},
update(el, binding, vnode, oldVnode) {
// Обновляем только если значение изменилось
if (binding.value !== binding.oldValue) {
el.setAttribute('title', binding.value)
}
}
})
Директива с аргументом и модификаторами:
<div v-demo:warning.large.error="'Внимание!'"></div>
В этом случае:
binding.arg
будет "warning"binding.modifiers
будет {large: true, error: true}
binding.value
будет "Внимание!"Доступ к контексту компонента:
bind(el, binding, vnode) {
// Доступ к данным компонента
const componentData = vnode.context.someData
// Вызов метода компонента
vnode.context.someMethod()
}
В Vue 3 Composition API аргументы остаются теми же, но с небольшими изменениями:
vnode.context
заменен на vnode.appContext
аргументы хуков директив предоставляют полную информацию о текущем состоянии директивы и элемента, позволяя создавать гибкие и мощные директивы. Правильное использование этих аргументов - ключ к эффективной работе с DOM в Vue приложениях.