0
0
Angularframework~20 mins

Dynamic component loading in Angular - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Dynamic Loader Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What happens when dynamically loading a component with Angular signals?
Consider an Angular standalone component that uses signals to dynamically load another component into a . What will be the rendered output if the signal controlling the component type changes?
Angular
import { Component, signal } from '@angular/core';

@Component({
  selector: 'app-dynamic-loader',
  standalone: true,
  template: `
    <ng-container *ngIf="currentComponent() as comp">
      <ng-container *ngComponentOutlet="comp"></ng-container>
    </ng-container>
    <button (click)="toggle()">Toggle Component</button>
  `
})
export class DynamicLoaderComponent {
  private compA = class {
    static ɵcmp = { selectors: [['comp-a']], template: function() { document.write('Component A Loaded'); } };
  };
  private compB = class {
    static ɵcmp = { selectors: [['comp-b']], template: function() { document.write('Component B Loaded'); } };
  };

  currentComponent = signal(this.compA);

  toggle() {
    this.currentComponent.set(this.currentComponent() === this.compA ? this.compB : this.compA);
  }
}
ABoth components render simultaneously inside the container.
BThe component does not render anything because signals cannot be used with *ngComponentOutlet.
CClicking the button causes a runtime error because the component classes are not registered.
DInitially 'Component A Loaded' is shown. Clicking the button switches the output to 'Component B Loaded'.
Attempts:
2 left
💡 Hint
Think about how signals update reactive values and how *ngComponentOutlet uses the current component reference.
📝 Syntax
intermediate
1:30remaining
Which option correctly uses Angular 17+ inject() to dynamically load a component?
Given Angular 17+ with standalone components and inject(), which code snippet correctly injects a ViewContainerRef to load a component dynamically?
A
const vcr = inject(ViewContainerRef);
vcr.createComponent(MyComponent);
B
const vcr = new ViewContainerRef();
vcr.createComponent(MyComponent);
C
const vcr = inject(MyComponent);
vcr.createComponent(ViewContainerRef);
D
const vcr = inject(ViewContainerRef);
vcr.loadComponent(MyComponent);
Attempts:
2 left
💡 Hint
inject() is used to get Angular dependencies, not to create new instances with new.
🔧 Debug
advanced
2:30remaining
Why does this dynamic component loading code cause a runtime error?
Analyze the following Angular code snippet that tries to load a component dynamically but throws an error at runtime. What is the cause?
Angular
import { Component, ViewChild, ViewContainerRef } from '@angular/core';

@Component({
  selector: 'app-host',
  template: `<ng-template #container></ng-template>`
})
export class HostComponent {
  @ViewChild('container', { read: ViewContainerRef }) container!: ViewContainerRef;

  ngAfterViewInit() {
    this.container.createComponent(SomeComponent);
  }
}

@Component({
  selector: 'app-some',
  template: `<p>Some works!</p>`
})
export class SomeComponent {}
ASomeComponent is not declared in any NgModule or standalone, so Angular cannot resolve it.
BThe ViewChild query is missing { static: true }, causing container to be undefined.
CcreateComponent requires a factory, not the component class directly.
DngAfterViewInit runs too early; dynamic loading should be in ngOnInit.
Attempts:
2 left
💡 Hint
Check if the component being loaded is properly registered or standalone.
state_output
advanced
2:00remaining
What is the output after toggling dynamic components twice?
Given this Angular component that toggles between two dynamically loaded components on button click, what will be the output after clicking the toggle button twice?
Angular
import { Component, signal } from '@angular/core';

@Component({
  selector: 'app-toggle',
  standalone: true,
  template: `
    <ng-container *ngComponentOutlet="current()"></ng-container>
    <button (click)="toggle()">Toggle</button>
  `
})
export class ToggleComponent {
  comp1 = class {
    static ɵcmp = { selectors: [['comp-1']], template: function() { document.write('First Component'); } };
  };
  comp2 = class {
    static ɵcmp = { selectors: [['comp-2']], template: function() { document.write('Second Component'); } };
  };

  current = signal(this.comp1);

  toggle() {
    this.current.set(this.current() === this.comp1 ? this.comp2 : this.comp1);
  }
}
AAfter two toggles, both components are displayed simultaneously.
BAfter two toggles, 'First Component' is displayed again.
CAfter two toggles, 'Second Component' remains displayed.
DAfter two toggles, the component container is empty.
Attempts:
2 left
💡 Hint
Think about how toggling twice switches the component back to the original.
🧠 Conceptual
expert
3:00remaining
Which statement best describes Angular's dynamic component loading with standalone components and signals?
Select the statement that accurately explains how Angular 17+ supports dynamic component loading using standalone components and signals.
ASignals cannot be used with dynamic component loading; only ViewContainerRef.createComponent is supported.
BDynamic component loading requires NgModules to declare components; standalone components cannot be loaded dynamically.
CSignals can hold component classes, and templates using *ngComponentOutlet reactively update when the signal changes, enabling seamless dynamic loading without NgModules.
DAngular requires manual change detection calls after dynamic component loading with signals to update the view.
Attempts:
2 left
💡 Hint
Consider Angular's move towards standalone components and reactive primitives like signals.