What are decorators in Angular?

Key takeaways:

  • Angular decorators are TypeScript features that add metadata to code elements without changing their implementation.

  • The four main types of decorators in Angular are class, property, method, and parameter decorators.

  • Key decorators include @Component, @NgModule, @Input, @Output, and @HostListener.

  • Decorators simplify configuration, improve code readability, and enable powerful features like dependency injection.

  • Custom decorators can be created to extend functionality and promote code reusability.

  • Proper use of decorators leads to more modular, maintainable, and efficient Angular applications.

  • Learning decorators is essential for both beginner and advanced Angular developers to create high-performance web applications.

Decorators are design patterns or functions that define how Angular features work. They make prior modifications to a class, service, filter, methods, properties, or parameters, that allow us to add metadata or alter behavior without changing the underlying code. In the Angular framework, decorators are used to define components, services, and modules.

Types of decorators

Angular supports four types of decorators:

  • Class decorators
  • Property decorators
  • Method decorators
  • Parameter decorators

Let’s discuss each of them in detail.

Class decorators

Class decorators in Angular provide metadata about the class to help Angular understand how to process and instantiate it. They tell Angular whether the class is a component, module, directive, or another specialized construct.

There are various class decorators in Angular, and among them, @Component and @NgModule are widely used.

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';

platformBrowserDynamic().bootstrapModule(AppModule)
  .catch(err => console.error(err));
Using class decorator in Angular

In the above code:

  • Line 3: We apply the @Component decorator to the AppComponent class. The @Component decorator marks this class as an Angular component, which means it will be responsible for a specific view and logic in the application.

  • Lines 4–5: The selector defines the custom HTML tag for the component, and templateUrl points to the external HTML file containing the component’s template. Similarly, the styleUrls points to the external CSS file.

Property decorators

Property decorators allow us to decorate some properties within our classes. We can quickly identify why we use any particular property of a class like @Input(), @Output(), @Override(), and so on. We can place the @Input() decorator above the property with this decorator. The Angular compiler will create an input binding with the property name and link them.

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';

platformBrowserDynamic().bootstrapModule(AppModule)
  .catch(err => console.error(err));
Using property decorator in Angular

In the above code:

  • Line 12: We decorate the property selectedBook with @Input() decorator. This allows it to receive data from a parent component. It is initialized to an empty string.

  • Lines 14–35: We define an array of books, where each book has a name and a boolean indicating if it is red.

  • Lines 37–39: We define the selectBook() method that takes a bookName as a parameter and assigns it to the selectedBook property. This method can be called when a book is clicked, updating the selected book’s name.

Method decorators

Method decorators are used to decorate the method defined inside our class with functionality. A typical example of a method decorator is @HostListener.

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';

platformBrowserDynamic().bootstrapModule(AppModule)
  .catch(err => console.error(err));
Using method decorator in Angular

The above code tells Angular that an event (in this case, a click event) on our host has happened, and we want the decorated method to be called with the event. The @HostListener decorator is used before the onHostClick() method.

  • Lines 13–16: We use the @HostListener decorator to listen for events on the host element of a component or directive. In the example provided, when the host element is clicked, the onHostClick() method is triggered, displaying an alert with the event type.

Parameter decorators

Parameter decorators are applied to the constructor parameter of the class and are used when we need to tell Angular to inject a particular provider in a constructor.

@Inject() is a widely used parameter decorator. We use this decorator to inject services in Angular classes.

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';

platformBrowserDynamic().bootstrapModule(AppModule)
  .catch(err => console.error(err));
Using parameter decorator in Angular

In the above code:

  • Line 15: We use @Inject() to inject our ExampleService into the constructor of the AppComponent. This allows the AppComponent to access the methods and properties of ExampleService. The service is imported in line 2.

  • Lines 20–27: We define the updateMessage() to update the message displayed in the component. This method is triggered by a user action, like clicking a button.

Conclusion

Decorators are a powerful feature in Angular that streamline development and enhance code organization. By utilizing TypeScript’s capabilities, Angular decorators provide a clean, efficient way to add metadata and modify the behavior of classes, properties, methods, and parameters. Understanding and effectively using decorators is important for building robust, and maintainable Angular applications that align with modern web development best practices.

Frequently asked questions

Haven’t found what you were looking for? Contact Us


How many decorators are in Angular?

Angular provides several built-in decorators, including @Component, @Directive, @Injectable, @Pipe, and @NgModule. These core decorators are essential for defining various parts of an Angular application. Additionally, we can create custom decorators to extend functionality. The exact number can vary with Angular versions, but learning these key decorators is crucial for effective Angular development.


What is a decorator and its types?

In Angular, decorators are design patterns that allow developers to add metadata to classes, methods, or properties. The main types include class decorators (e.g., @Component, @NgModule), property decorators (e.g., @Input, @Output), method decorators (e.g., @HostListener), and parameter decorators (e.g., @Inject). These TypeScript features enhance code readability and functionality in Angular applications.


What is decorator and directive?

Decorators in Angular are TypeScript features that add metadata to code elements, while directives are a core concept in Angular for extending HTML behavior. The @Directive decorator is used to create custom directives, which can manipulate the DOM, modify element behavior, or provide custom rendering. Both decorators and directives are essential tools for building dynamic, interactive Angular applications.


What is the purpose of decorators in TypeScript?

Decorators in TypeScript serve to annotate and modify classes, methods, properties, or parameters without changing their implementation. In Angular development, they simplify configuration, enhance code readability, and enable powerful features like dependency injection. Decorators allow developers to add metadata, implement aspect-oriented programming, and create more maintainable, modular code in Angular projects.


Free Resources

Copyright ©2024 Educative, Inc. All rights reserved