Директивы в Vue.js предоставляют набор хуков (hook functions), которые вызываются в определенные моменты жизненного цикла элемента. Эти хуки позволяют реагировать на изменения и управлять поведением DOM.
bind
bind(el, binding, vnode) {
// Инициализация
}
inserted
inserted(el, binding, vnode) {
// Работа с DOM
}
update
update(el, binding, vnode, oldVnode) {
// Реакция на изменения
}
componentUpdated
componentUpdated(el, binding, vnode, oldVnode) {
// Действия после полного обновления
}
unbind
unbind(el, binding, vnode) {
// Уборка
}
В Vue 3 имена хуков были изменены для согласованности с жизненным циклом компонентов:
bind
inserted
componentUpdated
unbind
app.directive('highlight', {
beforeMount(el, binding) {
// Аналог bind
},
mounted(el, binding) {
// Аналог inserted
},
updated(el, binding) {
// Вызывается при обновлении компонента
},
unmounted(el) {
// Очистка
}
})
Каждый хук получает следующие параметры:
name
: Имя директивы (без v-)value
: Переданное значениеoldValue
: Предыдущее значение (только в update)expression
: Строка выраженияarg
: Аргумент после двоеточия (v-dir:arg)modifiers
: Объект модификаторов (v-dir.modif)Хук bind/mounted для инициализации:
bind(el, binding) {
el.dataset.originalText = el.textContent
el.textContent = binding.value.toUpperCase()
}
Хук update для реактивности:
update(el, binding) {
if (binding.value !== binding.oldValue) {
el.style.color = binding.value
}
}
Хук unbind/unmounted для очистки:
unbind(el) {
window.removeEventListener('resize', el._handleResize)
}
хуки директив предоставляют точный контроль над поведением DOM-элементов в различные моменты их жизненного цикла. Правильное использование этих хуков позволяет создавать мощные и гибкие директивы для работы с DOM, интегрировать сторонние библиотеки и управлять ресурсами.