Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

VueJS - Custom Directives

Creating Custom Directives in VueJS

Custom directives in VueJS allow you to extend the functionality of HTML elements and attributes. This guide covers the basics of creating custom directives in VueJS, including defining, using, and understanding the benefits of custom directives.

Key Points:

  • Custom directives allow you to encapsulate and reuse DOM manipulation logic across multiple components.
  • Directives can be registered globally or locally.
  • Directives have lifecycle hooks such as bind, inserted, update, and unbind.

Defining and Using Custom Directives

Global Directive

Define a global custom directive and use it in a component:


// JavaScript
Vue.directive('focus', {
  inserted: function (el) {
    el.focus();
  }
});

new Vue({
  el: '#app'
});


Local Directive

Define a local custom directive within a component:


// JavaScript
const app = new Vue({
  el: '#app',
  directives: {
    focus: {
      inserted: function (el) {
        el.focus();
      }
    }
  }
});


Directive Lifecycle Hooks

bind

Called only once, when the directive is first bound to the element. This is where you can do one-time setup work.


// JavaScript
Vue.directive('demo', {
  bind(el, binding, vnode) {
    console.log('bind');
  }
});

new Vue({
  el: '#app'
});


inserted

Called when the bound element has been inserted into its parent node.


// JavaScript
Vue.directive('demo', {
  inserted(el, binding, vnode) {
    console.log('inserted');
  }
});

new Vue({
  el: '#app'
});


update

Called when the component's VNode is updated, but possibly before its children are updated. This hook can be called multiple times.


// JavaScript
Vue.directive('demo', {
  update(el, binding, vnode, oldVnode) {
    console.log('update');
  }
});

new Vue({
  el: '#app',
  data: {
    message: 'Hello'
  }
});


{{ message }}

unbind

Called only once, when the directive is unbound from the element.


// JavaScript
Vue.directive('demo', {
  unbind(el, binding, vnode) {
    console.log('unbind');
  }
});

new Vue({
  el: '#app'
});


Advanced Usage

Directive Arguments and Modifiers

Directives can accept arguments and modifiers to modify their behavior:


// JavaScript
Vue.directive('color', {
  bind(el, binding) {
    el.style.color = binding.value;
  }
});

new Vue({
  el: '#app'
});


This text is red

Dynamic Directive Arguments

Use dynamic arguments to bind a directive to a dynamic property:


// JavaScript
Vue.directive('demo', {
  bind(el, binding) {
    el.style[binding.arg] = binding.value;
  }
});

new Vue({
  el: '#app',
  data: {
    styleProperty: 'color',
    styleValue: 'blue'
  }
});


This text is blue

Best Practices

Follow these best practices when using custom directives in VueJS:

  • Encapsulate Reusable Logic: Use custom directives to encapsulate and reuse DOM manipulation logic across multiple components.
  • Avoid Complex Logic: Keep custom directives simple and avoid adding complex logic that could make them hard to maintain.
  • Document Directives: Document the purpose and usage of custom directives to make your code easier to understand and maintain.
  • Use Lifecycle Hooks Appropriately: Utilize the appropriate lifecycle hooks for specific tasks such as setup, DOM manipulation, and cleanup.

Example Application

Here is an example application that demonstrates using custom directives in VueJS:



Custom Directives Example

This text is red

This text is blue

Summary

This guide provided an overview of creating custom directives in VueJS, including defining and using custom directives, understanding directive lifecycle hooks, using directive arguments and modifiers, and following best practices. By understanding and utilizing these features, you can create reusable and maintainable VueJS components with enhanced functionality.