Сокращение функции — это специальный синтаксис в Vue, позволяющий определить одинаковое поведение для хуков bind
и update
директивы в одной функции, что упрощает код и уменьшает дублирование.
Вместо:
Vue.directive('color', {
bind(el, binding) {
el.style.color = binding.value
},
update(el, binding) {
el.style.color = binding.value
}
})
Можно использовать сокращенную запись:
Vue.directive('color', function(el, binding) {
el.style.color = binding.value
})
Переданная функция будет вызываться:
bind
)update
)Получает те же аргументы:
el
: DOM-элементbinding
: Объект с параметрами директивыvnode
: Виртуальный узелoldVnode
: Предыдущий виртуальный узел (только в update
)Vue.directive('text-color', function(el, binding) {
el.style.color = binding.value
})
Использование:
<p v-text-color="activeColor">Текст</p>
Vue.directive('font', function(el, binding) {
if (binding.modifiers.bold) el.style.fontWeight = 'bold'
if (binding.modifiers.italic) el.style.fontStyle = 'italic'
el.style.fontSize = `${binding.value}px`
})
Использование:
<p v-font.bold.italic="16">Текст</p>
Vue.directive('position', function(el, binding) {
el.style.position = 'absolute'
el.style[binding.arg || 'top'] = `${binding.value}px`
})
Использование:
<div v-position:left="20">Элемент</div>
bind
и update
идентичнаunbind
unbind
В Vue 3 концепция сохраняется, но с обновленными именами хуков:
app.directive('color', (el, binding) => {
el.style.color = binding.value
})
Эквивалентно работе в:
beforeMount
(аналог bind
)beforeUpdate
(новый хук)updated
(аналог componentUpdated
)Сокращенная запись может улучшить производительность:
сокращение функции в хуках директив — это удобный синтаксический сахар Vue.js для случаев, когда логика bind
и update
идентична. Он упрощает код, уменьшает дублирование и улучшает читаемость, но не подходит для сложных директив с разной логикой инициализации и обновления.