Bird
Raised Fist0
Angularframework~20 mins

ngAfterViewInit for view ready in Angular - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Angular View Lifecycle Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ lifecycle
intermediate
1:30remaining
When is ngAfterViewInit called in Angular?
In Angular, the ngAfterViewInit lifecycle hook is triggered at what point during a component's lifecycle?
AAfter the component is destroyed
BAfter the component's view and its child views have been fully initialized
CImmediately after the component's constructor runs
DBefore the component's inputs are set
Attempts:
2 left
💡 Hint
Think about when the component's template and child components are ready to interact with.
❓ component_behavior
intermediate
1:30remaining
What happens if you access a child component's property in ngOnInit instead of ngAfterViewInit?
Consider a parent component that tries to access a child component's property inside ngOnInit. What is the likely outcome?
AThe parent component's ngOnInit is skipped
BThe child component's property is always fully initialized and accessible
CAngular throws a runtime error immediately
DThe child component's property may be undefined or not yet initialized
Attempts:
2 left
💡 Hint
Think about when child views are ready compared to ngOnInit timing.
📝 Syntax
advanced
2:00remaining
Identify the correct ngAfterViewInit implementation
Which of the following Angular component snippets correctly implements the ngAfterViewInit lifecycle hook?
Aexport class MyComponent implements AfterViewInit { ngAfterViewInit() { console.log('View ready'); } }
Bexport class MyComponent implements AfterViewInit { ngAfterViewInit { console.log('View ready'); } }
Cexport class MyComponent implements OnInit { ngAfterViewInit() { console.log('View ready'); } }
Dexport class MyComponent { ngAfterViewInit() { console.log('View ready'); } }
Attempts:
2 left
💡 Hint
Check interface implementation and method syntax.
🔧 Debug
advanced
2:00remaining
Why does accessing @ViewChild in ngOnInit cause an error?
Given this code snippet, why does accessing @ViewChild('myDiv') in ngOnInit cause an error?
 @ViewChild('myDiv') myDivElement: ElementRef;

ngOnInit() {
  console.log(this.myDivElement.nativeElement.textContent);
}
ABecause the view children are not yet initialized during ngOnInit
BBecause @ViewChild cannot be used with ElementRef
CBecause ngOnInit runs after ngAfterViewInit
DBecause nativeElement is not accessible in Angular
Attempts:
2 left
💡 Hint
Consider when Angular sets the references for view children.
❓ state_output
expert
1:30remaining
What is the console output order for ngOnInit and ngAfterViewInit?
Given this Angular component code, what is the order of console logs when the component loads?
export class DemoComponent implements OnInit, AfterViewInit {
  ngOnInit() {
    console.log('Init');
  }
  ngAfterViewInit() {
    console.log('View Init');
  }
}
ABoth logs happen simultaneously
B"View Init" logged first, then "Init"
C"Init" logged first, then "View Init"
DNo logs appear because lifecycle hooks are not called
Attempts:
2 left
💡 Hint
Think about the sequence Angular calls lifecycle hooks.

Practice

(1/5)
1. What is the main purpose of the ngAfterViewInit lifecycle hook in Angular?
easy
A. To clean up resources when the component is destroyed
B. To initialize component input properties before the view loads
C. To handle user input events like clicks and keypresses
D. To run code after the component's view and child views are fully initialized

Solution

  1. Step 1: Understand Angular lifecycle hooks

    Angular provides hooks to run code at specific times in a component's life, such as creation, view initialization, and destruction.
  2. Step 2: Identify when ngAfterViewInit runs

    ngAfterViewInit runs after Angular fully initializes the component's view and its child views, making it safe to access view elements.
  3. Final Answer:

    To run code after the component's view and child views are fully initialized -> Option D
  4. Quick Check:

    ngAfterViewInit = view ready code [OK]
Hint: Runs after view loads, safe to access elements [OK]
Common Mistakes:
  • Confusing it with ngOnInit which runs earlier
  • Using it to handle input properties initialization
  • Thinking it runs on component destruction
2. Which of the following is the correct way to implement ngAfterViewInit in an Angular component?
easy
A. ngAfterViewInit => { console.log('View initialized'); }
B. ngAfterViewInit() { console.log('View initialized'); }
C. function ngAfterViewInit() { console.log('View initialized'); }
D. ngAfterViewInit: function() { console.log('View initialized'); }

Solution

  1. Step 1: Recall Angular component method syntax

    Angular lifecycle hooks are implemented as class methods without special syntax like arrow functions or function keywords.
  2. Step 2: Check each option's syntax

    ngAfterViewInit() { console.log('View initialized'); } uses the correct method syntax inside a class. Options A, B, and C use invalid or incorrect JavaScript syntax for class methods.
  3. Final Answer:

    ngAfterViewInit() { console.log('View initialized'); } -> Option B
  4. Quick Check:

    Use method() syntax for lifecycle hooks [OK]
Hint: Use method() syntax inside class for hooks [OK]
Common Mistakes:
  • Using arrow functions for lifecycle hooks
  • Adding function keyword inside class
  • Using object literal syntax instead of class methods
3. Given this Angular component code, what will be logged to the console?
import { Component, ViewChild, ElementRef, AfterViewInit } from '@angular/core';

@Component({ selector: 'app-sample', template: `
Content
` }) export class SampleComponent implements AfterViewInit { @ViewChild('box') box!: ElementRef; ngAfterViewInit() { console.log(this.box.nativeElement.textContent); } }
medium
A. Content
B. undefined
C. Error: box is undefined
D. null

Solution

  1. Step 1: Understand @ViewChild and ngAfterViewInit

    @ViewChild gets a reference to the DOM element after the view initializes. ngAfterViewInit runs after the view is ready, so the element is accessible.
  2. Step 2: Check what is logged

    The code logs this.box.nativeElement.textContent, which is the text inside the <div> with #box, which is "Content".
  3. Final Answer:

    Content -> Option A
  4. Quick Check:

    @ViewChild + ngAfterViewInit = element ready [OK]
Hint: Access @ViewChild only after ngAfterViewInit [OK]
Common Mistakes:
  • Trying to access @ViewChild in ngOnInit causing undefined
  • Assuming @ViewChild is null before view init
  • Confusing nativeElement with the ElementRef itself
4. What is the problem with this Angular component code?
import { Component, ViewChild, ElementRef, AfterViewInit } from '@angular/core';

@Component({ selector: 'app-test', template: `

Paragraph

` }) export class TestComponent implements AfterViewInit { @ViewChild('para') para!: ElementRef; ngOnInit() { console.log(this.para.nativeElement.textContent); } ngAfterViewInit() { console.log('View initialized'); } }
medium
A. ngAfterViewInit should be named ngAfterContentInit
B. Missing import of AfterViewInit interface
C. Accessing @ViewChild in ngOnInit causes undefined error
D. Template reference variable #para is invalid

Solution

  1. Step 1: Identify when @ViewChild is available

    @ViewChild references are set only after the view initializes, which happens after ngOnInit.
  2. Step 2: Check code usage

    The code tries to access this.para.nativeElement.textContent inside ngOnInit, which runs before the view is ready, causing undefined or error.
  3. Final Answer:

    Accessing @ViewChild in ngOnInit causes undefined error -> Option C
  4. Quick Check:

    @ViewChild ready only after ngAfterViewInit [OK]
Hint: Use @ViewChild only in ngAfterViewInit or later [OK]
Common Mistakes:
  • Accessing @ViewChild in ngOnInit
  • Confusing ngAfterViewInit with ngOnInit timing
  • Ignoring lifecycle hook order
5. You want to change the background color of a child component's element after it is fully rendered. Which approach correctly uses ngAfterViewInit to do this in the parent component?
Child component template:
<div #childBox>Child Content</div>

Parent component code options:
hard
A. Use @ViewChild('childBox') in parent and change style in ngAfterViewInit
B. Change child element style directly in parent's ngOnInit
C. Use @ViewChild in parent and change style in constructor
D. Modify child element style in parent's ngAfterContentInit without @ViewChild

Solution

  1. Step 1: Understand when child view elements are ready

    Child component's view elements are accessible in the parent during ngAfterViewInit, after the parent's view and child views are fully initialized.
  2. Step 2: Identify correct lifecycle hook and access method

    Using @ViewChild in the parent to get the child's element reference and modifying it in ngAfterViewInit ensures the element is ready and safe to modify.
  3. Final Answer:

    Use @ViewChild('childBox') in parent and change style in ngAfterViewInit -> Option A
  4. Quick Check:

    Modify child view in parent's ngAfterViewInit with @ViewChild [OK]
Hint: Use @ViewChild and ngAfterViewInit to access child elements [OK]
Common Mistakes:
  • Trying to access child elements in ngOnInit or constructor
  • Modifying child elements without @ViewChild reference
  • Using ngAfterContentInit which is for projected content, not view
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