Локальная регистрация директив позволяет определять директивы, доступные только в пределах конкретного компонента, что полезно для создания специализированного поведения без глобального загрязнения.
Директивы регистрируются в компоненте через опцию directives
:
export default {
directives: {
focus: {
// Хуки директивы
inserted(el) {
el.focus()
}
}
}
}
<template>
<div>
<input v-focus placeholder="Автофокус при вставке">
<input v-highlight="'yellow'" placeholder="Подсветка">
</div>
</template>
<script>
export default {
directives: {
// Простая директива фокуса
focus: {
inserted(el) {
el.focus()
}
},
// Более сложная директива с параметрами
highlight: {
bind(el, binding) {
el.style.backgroundColor = binding.value
},
update(el, binding) {
el.style.backgroundColor = binding.value
}
}
}
}
</script>
v-
export default {
directives: {
directive1: { /* ... */ },
directive2: { /* ... */ },
directive3: { /* ... */ }
}
}
Локальные директивы могут реагировать на изменения данных компонента:
<template>
<div v-dynamic-style="styleObject"></div>
</template>
<script>
export default {
data() {
return {
styleObject: {
color: 'red',
fontSize: '13px'
}
}
},
directives: {
dynamicStyle: {
update(el, binding) {
Object.keys(binding.value).forEach(prop => {
el.style[prop] = binding.value[prop]
})
}
}
}
}
</script>
В Vue 3 с Composition API регистрация выглядит аналогично:
import { defineComponent } from 'vue'
export default defineComponent({
directives: {
focus: {
mounted(el) {
el.focus()
}
}
},
setup() {
// Логика компонента
}
})
локальная регистрация директив в Vue выполняется через опцию directives
в компоненте и является лучшим выбором для специализированного поведения, которое не должно быть доступно глобально. Это способствует лучшей инкапсуляции и поддерживаемости кода.