Bird
0
0

Why does this directive cause an error?

medium📝 Debug Q7 of 15
Angular - Directives
Why does this directive cause an error?
@Directive({ selector: '[appToggle]' })
export class ToggleDirective {
  constructor(private el: ElementRef, private renderer: Renderer2) {
    this.el.nativeElement.addEventListener('click', () => {
      this.renderer.setStyle(this.el.nativeElement, 'display', 'none');
    });
  }
}
AElementRef cannot be used with Renderer2
BRenderer2 cannot set 'display' style
CDirect DOM event listener should use @HostListener instead
DDirective selector is invalid
Step-by-Step Solution
Solution:
  1. Step 1: Review event listener usage

    Directly adding event listeners on nativeElement is discouraged in Angular.
  2. Step 2: Use Angular's @HostListener for event handling

    @HostListener decorates methods to handle events safely and integrates with Angular's change detection.
  3. Final Answer:

    Direct DOM event listener should use @HostListener instead -> Option C
  4. Quick Check:

    Use @HostListener for events = A [OK]
Quick Trick: Use @HostListener for event handling in directives [OK]
Common Mistakes:
  • Directly adding native event listeners
  • Assuming Renderer2 cannot set styles
  • Confusing ElementRef and Renderer2 usage

Want More Practice?

15+ quiz questions · All difficulty levels · Free

Free Signup - Practice All Questions
More Angular Quizzes