Vue.js is a progressive framework that allows developers to build user interfaces intuitively and efficiently. With the release of Vue 3, the ability to extend and customize functionality through custom directives has become more powerful and flexible. Directives in Vue provide a way to add functionality to components declaratively, which can simplify code and improve application organization and maintenance.
Table of Contents
ToggleWhat Are Directives in Vue?
Directives in Vue are special attributes prefixed v-
, which are placed on DOM elements to perform tasks such as manipulating the DOM, adding event handlers, etc. Some of the more well-known built-in policies include v-bind
to bind element attributes, v-model
for bidirectional data linking, and v-if
for conditionals.
Creating Custom Directives in Vue 3
The Basic Setup
Creating a custom directive in Vue 3 involves defining it and then registering it so that it can be used in application components. A custom policy is defined by an object that can have several lifecycle functions:
- bind: Called only once, when the directive is first bound to the element. It is useful for performing initial configuration actions.
- inserted: Invoked when the linked element has been inserted into the parent DOM node.
- update: Called after the element's content has been updated, but before the DOM is updated. Useful for reacting to changes in policy values.
- componentUpdated: Called once the component and children have been updated.
- unbind: Called only once, when the directive is detached from the element.
Basic Example: Focus Directive
app.directive('focus', { mounted(el) { el.focus(); } });
This simple example creates a directive called v-focus
which can be used to set focus on an input element as soon as it is mounted.
Use in Vue Components
Advanced Use Cases
Modifiers
Directives can accept modifiers that allow you to alter their behavior. For example, a policy that applies an event listener might have a switch to run on the capture or bubble phase of the event.
Example: Policy for Tooltips
app.directive('tooltip', { mounted(el, binding) { el.setAttribute('title', binding.value); el.classList.add('tooltip-base'); }, updated(el , binding) { el.setAttribute('title', binding.value);
This directive allows any element to have a tooltip simply by using v-tooltip="my text"
which facilitates reuse and maintenance.
Global and Local Directives
Vue allows the definition of policies at both a global and local level. While global policies are available throughout the application, local policies are defined within components and are only available at the component scope.
Global Registry
app.directive('my-directive', {...});
Local Registry
<script>
export default {
directives: {
'mi-directiva': {
mounted(el, binding, vnode) {
// Personaliza el elemento
}
}
}
}
</script>
Good Practices and Tips
Using custom directives is extremely powerful, but must be done carefully. Here are some tips:
- Clarity: Using directives should make the code clearer and less complicated.
- Reusability: Design directives that can be reused in different parts of your application or even between projects.
- Maintenance: Make sure policies don't become too complex or difficult to maintain.
For more details and support on your Vue 3 projects, feel free to visit my blog or contact me here. Vue 3 offers an incredible set of tools to make your applications not only work well, but also a pleasure to maintain and extend.