Forbes India Leader Recognition
e.preventDefault(); // Prevent form submission input.blur(); // remove focus input.value = ""; // optional: clear the input

How to create Custom Directives in Angular?

How to create Custom Directives in Angular?

Featured Image

What is an Angular Directive?

Directives are the functions that are used to manipulate the DOM behavior and it is executed whenever Angular compiler finds it.

Types of Angular Directives

There are three types of Angular Directives.

  1. Attribute Directives
  2. Structural Directives
  3. Component Directives

Attribute Directives:

Attribute directives are used to manipulate the appearance and behaviors of the DOM elements. We can use the Attribute directives to change the style of the DOM element conditionally or show and hide the elements conditionally but they are not removed from the DOM.

Examples: ngStyle, ngClass, hidden

Structural Directives:

Structural directives are used to change the structure of the DOM element by adding or removing the elements. Structural Directive’s name always contains an asterisk(*) as a prefix.

Examples: *ngIf, *ngFor, *ngSwitch

Component Directives:

Component directives are directive having a template. Whereas Attribute and Structural directive don’t have a template.

Here, we’ll learn how to create a Custom Attribute and Structural directive.

Create a custom Attribute Directive

Let’s create a custom directive to change the background color.

It is very easy to create a custom directive with the Angular-CLI.

We’ve to run the following command to create a directive.

ng generate directive change-background

If we are using Angular-CLI this will be declared in the corresponding (app-) module automatically, otherwise, we’ll have to add it manually.

import {Directive} from '@angular/core';

@Directive({
    selector: ['appChangeBackground']
})

export class ChangeBackgroundDirective {
    constructor() {}
}

We need to import ElementRef to access the DOM element.

import {Directive, ElementRef} from '@angular/core';

@Directive({
    selector: ['appChangeBackground']
})

export class ChangeBackgroundDirective {
    constructor(private elementRef: ElementRef) {
elementRef.nativeElement.style.backgroundColor = '#ce4e0e’;
    }
}

Now we can use this directive in our HTML file.

<button appChangeBackground>Submit</button>

Create a custom Structural Directive

Let’s create a custom Structural Directive that will work just opposite to the *ngIf directive.

We have to import Directive, TemplateRef, ViewContainerRef, Input from @angular/core.

Input decorator is used to transferring data between the two components, it passes data from one component to another using property binding.

ViewContainerRef is a container where we can attach one or more views. We’ll use the createEmbeddedView() method to attach the embedded templates to the container.

import {Directive, Input, TemplateRef, ViewContainerRef} from '@angular/core';




@Directive({

    selector: ['appNotIf']

})




export class ChangeBackgroundDirective {

    constructor(private tempRef: TemplateRef<any>

    private viewContainer: ViewContainerRef) {

elementRef.nativeElement.style.backgroundColor = '#fff';

    }




    @Input() set appNotIf(condition: boolean) {

if(!condition) {

    this.viewContainer.createEmbeddedView(this.tempRef)

} else {

    this.viewContainer.clear();

}

    }

}

In the HTML file, we can use this directive with the given syntax.

<h1 *appNotIf='true'>True</h1>

<h1 *appNotIf='false'>False</h1>

It will print ‘False’ because our directive is designed to display the false value.

Related Posts

Latest Posts

  • All Posts
  • AI Powered Knowledge
  • ai/ml
  • CEO India Magazine
  • CMMI level 5 Certification
  • e-learning
  • Fintech
  • gaming
  • Generative AI
  • healthcare
  • manufacturing
  • News
  • OTT
  • Portfolio
  • supply chain
  • travel and hospitality
  • Tudip's AI Hackathon
  • Voxlearn Enterprises
    •   Back
    • Android
    • iOS
    • Java
    • PHP
    • MEAN
    • Ruby
    • DotNet
    • IoT
    • Cloud
    • Testing
    • Roku
    • CMS
    • Python
The Future of Workplace Learning: AI-Powered Knowledge on Demand

The Future of Workplace Learning: AI-Powered Knowledge on Demand

June 12, 2026

A few months ago, I was sitting in a meeting with a team lead who looked genuinely frustrated. Not because…

Read More
We Did It Again: Tudip Successfully Renews Its CMMI Level 5 Certification

We Did It Again: Tudip Successfully Renews Its CMMI Level 5 Certification

June 9, 2026

Nobody around here needed a memo to know something worth celebrating had happened. The message from the CMMI Institute said…

Read More
CEO India Magazine Features Dipti Agrawal: The Woman Behind Intelligent Enterprise Solutions

CEO India Magazine Features Dipti Agrawal: The Woman Behind Intelligent Enterprise Solutions

June 9, 2026

There are moments at work that just stop you in your tracks. Not the big quarterly reviews or the product…

Read More

India

Plot No. 11/2, Phase 3, Hinjewadi Rajiv Gandhi Infotech Park, Pune, India – 411057.
info@tudip.com
+91-96-8990-0537

United States

1999 S. Bascom Ave Suite 700, Campbell CA. 95008, USA.
info@tudip.com
+1-408-216-8162

Canada

64 Caracas Road North York, Toronto Ontario M2K 1B1, Canada.
info@tudip.com

Mexico

Calle Amado Nervo #785 Interior B Colonia Ladron De Guevara 44600 Guadalajara, Jalisco, Mexico.
info@tudip.com

Singapore

77 High Street, #10-12B High Street Plaza, Singapore 179433.
info@tudip.com

Colombia

Cra. 9 # 113-53 Of. 1405 Bogotá D.C., Colombia.
info@tudip.com

UAE

Tudip Information Technologies L.L.C Office No 109, ABU HAIL BUILDING 13, Abu Hail, Dubai, UAE.
info@tudip.com

Nigeria

22 Kumasi Crescent, Wuse 2, Abuja, Nigeria.
info@tudip.com