WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

Angular · Intermediate · question 24 of 100

What is the difference between the ngOnChanges and ngDoCheck lifecycle hooks?

📕 Buy this interview preparation book: 100 Angular questions & answers — PDF + EPUB for $5

In Angular, ‘ngOnChanges‘ and ‘ngDoCheck‘ are two different lifecycle hooks that have specific purposes and use cases. Let me explain each hook in detail and then discuss their differences.

**1. ‘ngOnChanges‘:**

‘ngOnChanges‘ is a lifecycle hook specifically designed to listen for changes in ‘Input()‘-bound properties. This method is called when Angular detects any changes in one or more of the input property values within a component. The ‘ngOnChanges‘ hook is used to implement any custom behavior that you may want to apply when an Input property changes.

‘ngOnChanges‘ receives an ‘Input‘ properties object ‘[propertyName: string]: SimpleChange‘ where ‘SimpleChange‘ is a class representing a basic change from a previous to a new value. Here’s the basic structure of how to use ‘ngOnChanges‘:

import { Component, Input, OnChanges, SimpleChanges } from "@angular/core";

@Component({
  /* ... */
})
export class ExampleComponent implements OnChanges {
  @Input() someValue: any;

  ngOnChanges(changes: SimpleChanges): void {
    if (changes.someValue) {
      // Handle changes to 'someValue'.
      const previousValue = changes.someValue.previousValue;
      const currentValue = changes.someValue.currentValue;
      // Do something with the previous and/or new value.
    }
  }
}

**2. ‘ngDoCheck‘:**

‘ngDoCheck‘ is another lifecycle hook, but its purpose is to detect and act upon changes that Angular has not, or cannot, identify by default. This method is called on _every change detection cycle_, even when no changes have been made. It is typically used when you need to implement custom change detection for a specific use case or a complex application.

Here’s the basic structure of how to use ‘ngDoCheck‘:

import { Component, DoCheck } from "@angular/core";

@Component({
  /* ... */
})
export class ExampleComponent implements DoCheck {
  ngDoCheck(): void {
    // Run custom change detection logic.
  }
}

**Differences between ‘ngOnChanges‘ and ‘ngDoCheck‘:**

The major differences between these two lifecycle hooks are:

1. ‘ngOnChanges‘ only checks for changes in ‘Input()‘-bound properties, while ‘ngDoCheck‘ runs on every change detection cycle, even for non-input properties;

2. ‘ngOnChanges‘ is automatically called by Angular when there are input property changes, while ‘ngDoCheck‘ is useful for custom change detection logic outside of Angular’s default behavior;

3. ‘ngOnChanges‘ provides a ‘SimpleChanges‘ object, containing the input properties that have changed with their previous and current values, whereas ‘ngDoCheck‘ does not.

In summary, ‘ngOnChanges‘ is primarily used to respond to ‘Input()‘-bound property changes in a component, and ‘ngDoCheck‘ is used to implement custom change detection logic for other cases.

Use ‘ngOnChanges‘ when you want to listen for changes in input properties, and use ‘ngDoCheck‘ when you need to handle changes outside of Angular’s default change detection or for custom change detection in a more complex scenario.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Angular interview — then scores it.
📞 Practice Angular — free 15 min
📕 Buy this interview preparation book: 100 Angular questions & answers — PDF + EPUB for $5

All 100 Angular questions · All topics