InterviewHubPRO
Section Overview
Q13

Question 13 of 283

Part 1: Architecture, Components, Directives & Lifecycle (1 - 35)

5%
Angular & Signals (283 Qs)•Part 1: Architecture, Components, Directives & Lifecycle (1 - 35)

What is metadata?

Metadata is used to decorate a class so that it can configure the expected behavior of the class. The metadata is represented by decorators

  1. Class decorators, e.g. @Component and @NgModule
typescript
 import { NgModule, Component } from '@angular/core';

 @Component({
   selector: 'my-component',
   template: '<div>Class decorator</div>',
 })
 export class MyComponent {
   constructor() {
     console.log('Hey I am a component!');
   }
 }

 @NgModule({
   imports: [],
   declarations: [],
 })
 export class MyModule {
   constructor() {
     console.log('Hey I am a module!');
   }
 }
  1. Property decorators Used for properties inside classes, e.g. @Input and @Output
typescript
 import { Component, Input } from '@angular/core';

 @Component({
     selector: 'my-component',
     template: '<div>Property decorator</div>'
 })

 export class MyComponent {
     @Input()
     title: string;
 }
  1. Method decorators Used for methods inside classes, e.g. @HostListener
typescript
 import { Component, HostListener } from '@angular/core';

 @Component({
     selector: 'my-component',
     template: '<div>Method decorator</div>'
 })
 export class MyComponent {
     @HostListener('click', ['$event'])
     onHostClick(event: Event) {
         // clicked, `event` available
     }
 }
  1. Parameter decorators Used for parameters inside class constructors, e.g. @Inject, @Optional
typescript
 import { Component, Inject } from '@angular/core';
 import { MyService } from './my-service';

 @Component({
     selector: 'my-component',
     template: '<div>Parameter decorator</div>'
 })
 export class MyComponent {
     constructor(@Inject(MyService) myService) {
         console.log(myService); // MyService
     }
 }

 // Angular v18 and above

 import { Component, inject } from '@angular/core';
 import { MyService } from './my-service';

 @Component({
     selector: 'my-component',
     template: '<div>Parameter decorator</div>'
 })
 export class MyComponent {
 myService: MyService = inject(MyService)
     constructor() {
         console.log(myService); // MyService
     }
 }