Directives are one of the most powerful features of Angular, allowing you to extend HTML with custom behavior and functionality. They enable you to manipulate the DOM, add dynamic behavior, and create reusable components. In this article, we’ll explore the different types of directives in Angular, including built-in directives and custom directives. By the end of this guide, you’ll have a solid understanding of how to use directives effectively in your Angular applications.
What are Directives?
Directives are classes that add additional behavior to elements in your Angular applications. They are used to manipulate the DOM, change the appearance of elements, and add dynamic functionality. Angular provides three types of directives:
- Component Directives: Components are directives with a template. They are the most common type of directive in Angular.
- Attribute Directives: Attribute directives change the appearance or behavior of an element, component, or another directive.
- Structural Directives: Structural directives change the DOM layout by adding or removing elements.
Built-in Directives
Angular provides several built-in directives that you can use in your templates. Let’s explore some of the most commonly used ones:
1. Attribute Directives
Attribute directives are used to change the appearance or behavior of an element. The most common built-in attribute directives are ngClass
and ngStyle
.
ngClass
The ngClass
directive allows you to dynamically add or remove CSS classes based on an expression.
<div [ngClass]="{'active': isActive, 'disabled': isDisabled}">Dynamic Classes</div>
In the component class:
export class AppComponent {
isActive = true;
isDisabled = false;
}
ngStyle
The ngStyle
directive allows you to dynamically set inline styles based on an expression.
<div [ngStyle]="{'color': textColor, 'font-size.px': fontSize}">Dynamic Styles</div>
In the component class:
export class AppComponent {
textColor = 'red';
fontSize = 20;
}
2. Structural Directives
Structural directives are used to change the DOM layout by adding or removing elements. The most common built-in structural directives are ngIf
, ngFor
, and ngSwitch
.
ngIf
The ngIf
directive conditionally adds or removes an element from the DOM based on an expression.
<div *ngIf="isVisible">Visible Content</div>
In the component class:
export class AppComponent {
isVisible = true;
}
ngFor
The ngFor
directive repeats an element for each item in a collection.
<ul>
<li *ngFor="let item of items">{{ item }}</li>
</ul>
In the component class:
export class AppComponent {
items = ['Apple', 'Banana', 'Orange'];
}
ngSwitch
The ngSwitch
directive conditionally adds or removes elements based on the value of an expression.
<div [ngSwitch]="color">
<p *ngSwitchCase="'red'">Red</p>
<p *ngSwitchCase="'blue'">Blue</p>
<p *ngSwitchDefault>Default</p>
</div>
In the component class:
export class AppComponent {
color = 'red';
}
Creating Custom Directives
In addition to built-in directives, Angular allows you to create custom directives to add custom behavior to your applications. Let’s walk through the process of creating a custom attribute directive.
Step 1: Generate the Directive
Use the Angular CLI to generate a new directive:
ng generate directive highlight
This command generates a new directive file (highlight.directive.ts
) with the following structure:
import { Directive } from '@angular/core';
@Directive({
selector: '[appHighlight]'
})
export class HighlightDirective {
constructor() {}
}
Step 2: Implement the Directive
Modify the directive to change the background color of an element when it is hovered over:
import { Directive, ElementRef, HostListener } from '@angular/core';
@Directive({
selector: '[appHighlight]'
})
export class HighlightDirective {
constructor(private el: ElementRef) {}
@HostListener('mouseenter') onMouseEnter() {
this.highlight('yellow');
}
@HostListener('mouseleave') onMouseLeave() {
this.highlight(null);
}
private highlight(color: string | null) {
this.el.nativeElement.style.backgroundColor = color;
}
}
Step 3: Use the Directive
Apply the directive to an element in your template:
<p appHighlight>Hover over this text to highlight it.</p>
Secrets and Hidden Facts
- Directive Selectors: Directive selectors can be attribute-based, element-based, or class-based, depending on your needs.
- Host Binding: Use the
@HostBinding
decorator to bind a directive property to a host element property. - Host Listeners: Use the
@HostListener
decorator to listen for events on the host element.
Conclusion
Directives are a powerful feature of Angular that allow you to extend HTML with custom behavior and functionality. By understanding the different types of directives—component directives, attribute directives, and structural directives—you can create dynamic, interactive, and reusable components in your Angular applications.
Whether you’re using built-in directives or creating custom directives, mastering directives is essential for Angular development. So, start experimenting with directives in your projects and unlock the full potential of Angular!

No comments: