Bird
Raised Fist0
Angularframework~10 mins

Why lifecycle hooks matter in Angular - Visual Breakdown

Choose your learning style10 modes available
Concept Flow - Why lifecycle hooks matter
Component Created
↓
ngOnInit Called
↓
Component Rendered
↓
User Interaction or Data Change
↓
ngOnChanges or ngDoCheck Called
↓
Component Updated
↓
Component Destroyed
↓
ngOnDestroy Called
This flow shows how Angular calls lifecycle hooks at key moments: creation, initialization, updates, and destruction of a component.
Execution Sample
Angular
import { Component, OnInit, OnDestroy } from '@angular/core';

@Component({ selector: 'app-demo', standalone: true, template: `<p>{{message}}</p>` })
export class DemoComponent implements OnInit, OnDestroy {
  message = '';
  ngOnInit() { this.message = 'Hello!'; }
  ngOnDestroy() { console.log('Cleanup done'); }
}
This Angular component sets a message when it starts and logs a message when it is destroyed.
Execution Table
StepLifecycle HookActionComponent StateOutput/Effect
1Component CreatedAngular creates component instancemessage = ''No visible output yet
2ngOnInitSets message to 'Hello!'message = 'Hello!'Template shows: Hello!
3User interacts or data changesNo lifecycle hook yetmessage = 'Hello!'No change
4Component destroyedCalls ngOnDestroymessage = 'Hello!'Console logs: Cleanup done
💡 Component lifecycle ends after ngOnDestroy is called when component is removed
Variable Tracker
VariableStartAfter ngOnInitAfter User InteractionAfter ngOnDestroy
message'''Hello!''Hello!''Hello!'
Key Moments - 2 Insights
Why does ngOnInit run after the component is created but before it is shown?
ngOnInit is designed to initialize data before the component appears on screen, as shown in step 2 of the execution_table where message is set before rendering.
What happens if we try to update the message in ngOnDestroy?
ngOnDestroy is for cleanup, not UI updates. The component is about to be removed, so changes like updating message won't affect the UI, as seen in step 4.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of 'message' after ngOnInit runs?
A'Goodbye!'
B'Hello!'
C''
Dundefined
💡 Hint
Check the 'Component State' column at step 2 in the execution_table.
At which step does the component show 'Hello!' on the screen?
AStep 3
BStep 1
CStep 2
DStep 4
💡 Hint
Look at the 'Output/Effect' column in the execution_table.
If we remove ngOnDestroy, what changes in the execution flow?
ANo cleanup message in console
BMessage never sets to 'Hello!'
CComponent never created
DComponent never destroyed
💡 Hint
Refer to step 4 in the execution_table where ngOnDestroy logs cleanup.
Concept Snapshot
Angular lifecycle hooks run at key moments:
- ngOnInit: initialize data before showing
- ngOnChanges/ngDoCheck: detect updates
- ngOnDestroy: cleanup before removal
They help manage component behavior smoothly.
Full Transcript
Angular components go through stages: creation, initialization, updates, and destruction. Lifecycle hooks like ngOnInit run after creation to set up data before the component appears. When data changes, hooks like ngOnChanges detect updates. Finally, ngOnDestroy runs before the component is removed to clean up resources. This flow ensures components behave predictably and efficiently.

Practice

(1/5)
1. Why are lifecycle hooks important in Angular components?
easy
A. They make components load faster by default.
B. They automatically style your components.
C. They replace the need for services.
D. They let you run code at specific times during a component's life.

Solution

  1. Step 1: Understand what lifecycle hooks do

    Lifecycle hooks allow you to run code at key moments like creation, update, or destruction of a component.
  2. Step 2: Identify the main benefit

    This helps manage resources and keep the app efficient by running code only when needed.
  3. Final Answer:

    They let you run code at specific times during a component's life. -> Option D
  4. Quick Check:

    Lifecycle hooks = run code at key moments [OK]
Hint: Lifecycle hooks run code at key moments [OK]
Common Mistakes:
  • Thinking lifecycle hooks style components
  • Believing hooks replace services
  • Assuming hooks speed up loading automatically
2. Which of the following is the correct syntax to implement the ngOnInit lifecycle hook in an Angular component?
easy
A. ngOnInit() { console.log('Init'); }
B. onInit() { console.log('Init'); }
C. nginit() { console.log('Init'); }
D. init() { console.log('Init'); }

Solution

  1. Step 1: Recall the exact lifecycle hook name

    The correct lifecycle hook method name is ngOnInit with exact casing.
  2. Step 2: Match the syntax

    The method should be declared as ngOnInit() { ... } inside the component class.
  3. Final Answer:

    ngOnInit() { console.log('Init'); } -> Option A
  4. Quick Check:

    Correct hook name and syntax = ngOnInit() { console.log('Init'); } [OK]
Hint: Lifecycle hooks start with 'ng' and use camelCase [OK]
Common Mistakes:
  • Using wrong method names like onInit or init
  • Incorrect casing like nginit
  • Missing 'ng' prefix in method name
3. Given this Angular component code snippet, what will be logged to the console when the component is created?
export class MyComponent implements OnInit {
  constructor() { console.log('Constructor called'); }
  ngOnInit() { console.log('ngOnInit called'); }
}
medium
A. Constructor called\nngOnInit called
B. ngOnInit called\nConstructor called
C. Only Constructor called
D. Only ngOnInit called

Solution

  1. Step 1: Understand Angular component creation order

    The constructor runs first when the component is created, then ngOnInit runs after Angular sets input properties.
  2. Step 2: Trace the console logs

    First, 'Constructor called' logs, then 'ngOnInit called' logs.
  3. Final Answer:

    Constructor called\nngOnInit called -> Option A
  4. Quick Check:

    Constructor runs before ngOnInit [OK]
Hint: Constructor runs before ngOnInit [OK]
Common Mistakes:
  • Thinking ngOnInit runs before constructor
  • Expecting only one log message
  • Confusing lifecycle order
4. What is wrong with this Angular component code snippet?
export class SampleComponent implements OnInit {
  ngOnInit() {
    this.loadData();
  }
  loadData() {
    console.log('Data loaded');
  }
  ngOnDestroy() {
    this.loadData();
  }
}
medium
A. ngOnInit should not be implemented without a constructor.
B. ngOnDestroy must return a value.
C. Calling loadData() inside ngOnDestroy is incorrect because it runs when component is destroyed.
D. loadData() cannot be called inside lifecycle hooks.

Solution

  1. Step 1: Understand purpose of ngOnDestroy

    ngOnDestroy runs when the component is about to be removed. It is used to clean up resources, not to load data.
  2. Step 2: Identify misuse of loadData()

    Calling loadData() during destruction is illogical because loading data is for initialization, not cleanup.
  3. Final Answer:

    Calling loadData() inside ngOnDestroy is incorrect because it runs when component is destroyed. -> Option C
  4. Quick Check:

    ngOnDestroy is for cleanup, not loading data [OK]
Hint: Use ngOnDestroy only for cleanup tasks [OK]
Common Mistakes:
  • Thinking ngOnDestroy needs a return value
  • Believing lifecycle hooks can't call methods
  • Assuming constructor is required with ngOnInit
5. You want to fetch user data only once when a component loads and clean up a subscription when the component is destroyed. Which lifecycle hooks should you use together?
hard
A. ngOnChanges to fetch data, ngDoCheck to clean up subscription
B. ngOnInit to fetch data, ngOnDestroy to clean up subscription
C. constructor to fetch data, ngAfterViewInit to clean up subscription
D. ngAfterContentInit to fetch data, ngAfterContentChecked to clean up subscription

Solution

  1. Step 1: Identify hook for initial data fetch

    Use ngOnInit to run code once after component creation, perfect for fetching data.
  2. Step 2: Identify hook for cleanup

    Use ngOnDestroy to clean up resources like subscriptions before component is removed.
  3. Final Answer:

    ngOnInit to fetch data, ngOnDestroy to clean up subscription -> Option B
  4. Quick Check:

    Init = fetch, Destroy = cleanup [OK]
Hint: Fetch in ngOnInit, clean in ngOnDestroy [OK]
Common Mistakes:
  • Using constructor for async data fetch
  • Confusing ngAfterViewInit with cleanup
  • Using ngOnChanges for one-time fetch
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard