Angular version 18.2.14 has a bug on @Directive standalone compiling

Summary

The Angular version 18.2.14 has a bug related to @Directive standalone compiling. This issue arises when using a directive with the standalone: true property, and the directive is not properly imported into the component’s imports array. The bug causes the page to function incorrectly without throwing any compilation errors.

Root Cause

The root cause of this issue is:

  • The @Directive is not being properly registered when using standalone: true
  • The lack of explicit import of the HighlightDirective in the component’s imports array
  • The compiler not throwing an error when the directive is not imported

Why This Happens in Real Systems

This issue can occur in real systems due to:

  • Misconfiguration of the directive’s standalone property
  • Incomplete imports in the component’s imports array
  • Insufficient compiler checks for directive registration

Real-World Impact

The real-world impact of this bug includes:

  • Silent failures in the application, where the page functions incorrectly without any visible errors
  • Difficulty in debugging, as the compiler does not throw any errors
  • Potential security vulnerabilities, if the incorrectly functioning page exposes sensitive data

Example or Code

import { Directive, ElementRef, HostListener } from '@angular/core';

@Directive({
  selector: '[appHighlight]',
  standalone: true
})
export class HighlightDirective {
  constructor(private el: ElementRef) { }

  @HostListener('mouseenter')
  onMouseEnter(): void {
    this.highlight('yellow');
  }

  @HostListener('mouseleave')
  onMouseLeave(): void {
    this.highlight('');
  }

  private highlight(color: string): void {
    this.el.nativeElement.style.backgroundColor = color;
  }
}

How Senior Engineers Fix It

Senior engineers can fix this issue by:

  • Explicitly importing the HighlightDirective in the component’s imports array
  • Verifying the directive’s standalone property is correctly configured
  • Implementing additional checks to ensure proper directive registration

Why Juniors Miss It

Junior engineers may miss this issue due to:

  • Lack of understanding of the @Directive standalone property
  • Insufficient knowledge of the component’s imports array
  • Inadequate testing of the application’s functionality