Demystifying Directives in Angular: A Step-by-Step Guide

In Angular, directives are like superpowers for your HTML elements. They extend their capabilities, allowing you to create dynamic and interactive user interfaces. This blog post will guide you through directives in a clear, step-by-step manner, making them easy to understand and use in your Angular applications.

What are Directives?

Imagine directives as special instructions that Angular understands. You can apply these instructions (directives) to your HTML elements using attributes or selectors to add custom or modify existing behavior. Directives essentially enhance the functionality of your components and templates.

Types of Directives

There are three main types of directives in Angular, each serving a specific purpose:

  1. Component Directives: These are the foundation of Angular applications. They combine an HTML template, a TypeScript class, and CSS styles to represent a reusable UI building block. Components are essentially directives with a template.
  2. Structural Directives: As the name suggests, these directives manipulate your application’s DOM (Document Object Model) structure. They can add, remove, or reorder elements based on conditions or data. Common examples include *ngIf, *ngFor, and *ngSwitch.
  3. Attribute Directives: These directives modify the attributes or behavior of existing HTML elements. They typically listen to events or bind data to elements. Examples include ngModel, ngClass, and ngStyle.

Creating Your First Directive (Attribute Directive):

Let’s create a simple directive called highlight That changes the background color of an element on mouse hover:

Generate the Directive Class:

  1. Generate the Directive Class:

    ng generate directive highligh

    This creates two files: highlight.directive.ts and highlight.directive.spec.ts. The first file (highlight.directive.ts) will define your directive’s logic.
  2. Import and Decorate:
    In highlight.directive.ts, import necessary modules, and decorate the class with the directive :
import { Directive, ElementRef, HostListener } from '@angular/core';

  selector: '[appHighlight]' // Attribute selector with appHighlight prefix
export class HighlightDirective {
  constructor(private el: ElementRef) {}

  @HostListener('mouseenter') onMouseEnter() { = 'lightblue';

  @HostListener('mouseleave') onMouseLeave() { = '';
  • @directive is the decorator that marks the class as a directive.
  • selector: ‘[appHighlight]’ Specifies the selector (attribute in this case) that identifies the element to which the directive will be applied. The appHighlight prefix is a convention for custom directives.

3. Inject ElementRef and Use HostListener:

  • ElementRef Injects a reference to the element to which the directive is applied.
  • @HostListener It is a decorator used to listen for DOM events on the host element (the element with the directive applied). Here, we listen for mouseenter and mouseleave events to change the background color on hover.

4. Apply the Directive in Your Template:

In your component’s HTML template, use the directive’s selector as an attribute on the element you want to highlight: <p appHighlight>This text will be highlighted on hover!</p>

Running Your Application:

Start your Angular development server (usually ng serve) and navigate to your application in the browser. Hover over the paragraph element with appHighlight to see the background color change dynamically.

Understanding Directive Lifecycle Hooks (Optional):

Directives can have lifecycle hooks that provide opportunities to perform actions at specific stages. These hooks include ngOnInit, ngOnDestroy, ngOnChanges, etc. However, they are not typically necessary for simple attribute directives like the highlight example.

Leveraging Built-in Directives:

Angular provides a rich set of built-in directives for common tasks like forms, data binding, and styling. Explore the Angular documentation for detailed information on these directives:


Directives are a powerful tool in your Angular development arsenal. By understanding the different types and creating your directives, you can significantly enhance the functionality and interactivity of your applications. Keep exploring and experimenting with directives to unlock their full potential.

Read More Blog

Quick Game