Сокращение функции — это специальный синтаксис в 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 идентичнаunbindunbindВ Vue 3 концепция сохраняется, но с обновленными именами хуков:
app.directive('color', (el, binding) => {
el.style.color = binding.value
})
Эквивалентно работе в:
beforeMount (аналог bind)beforeUpdate (новый хук)updated (аналог componentUpdated)Сокращенная запись может улучшить производительность:
сокращение функции в хуках директив — это удобный синтаксический сахар Vue.js для случаев, когда логика bind и update идентична. Он упрощает код, уменьшает дублирование и улучшает читаемость, но не подходит для сложных директив с разной логикой инициализации и обновления.