angular

psh-inc's avatarfrom psh-inc

Angular 17 standalone components, RxJS patterns, and reactive forms for the casino platform.Use when: Building Angular components, services, guards, interceptors, or working with RxJS observables in casino-f or casino-customer-f.

⭐0stars🔀0forks📁View on GitHub🕐Updated Jan 10, 2026

When & Why to Use This Skill

This Claude skill streamlines Angular 17 development by providing standardized patterns for standalone components, reactive forms, and RxJS-based state management. It optimizes application performance through OnPush change detection and ensures memory safety by enforcing strict RxJS subscription cleanup patterns, making it ideal for maintaining complex, high-performance frontend architectures.

Use Cases

  • Developing high-performance standalone components in Angular 17 with optimized change detection strategies.
  • Implementing robust RxJS patterns for state management and API data fetching with automated memory leak prevention.
  • Creating complex reactive forms with integrated validation and error handling for secure user data entry.
  • Architecting dual-frontend systems that require a mix of standalone components and traditional module-based structures.
nameangular
description|
Use whenBuilding Angular components, services, guards, interceptors, or working with RxJS observables in casino-f or casino-customer-f.
allowed-toolsRead, Edit, Write, Glob, Grep, Bash

Angular Skill

Angular 17 standalone component patterns for the casino platform's dual-frontend architecture. The customer frontend (casino-customer-f/) uses standalone components exclusively, while the admin frontend (casino-f/) uses a module-based approach. Both require strict RxJS subscription cleanup with takeUntil and use OnPush change detection for performance.

Quick Start

Standalone Component

@Component({
  selector: 'app-player-list',
  standalone: true,
  imports: [CommonModule, RouterModule],
  templateUrl: './player-list.component.html',
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class PlayerListComponent implements OnInit, OnDestroy {
  private destroy$ = new Subject<void>();
  players$ = new BehaviorSubject<Player[]>([]);

  constructor(private playerService: PlayerService) {}

  ngOnInit(): void {
    this.playerService.list().pipe(
      takeUntil(this.destroy$),
      map(page => page.content)
    ).subscribe(players => this.players$.next(players));
  }

  ngOnDestroy(): void {
    this.destroy$.next();
    this.destroy$.complete();
  }
}

Service with State Management

@Injectable({ providedIn: 'root' })
export class WalletService implements OnDestroy {
  private balance$ = new BehaviorSubject<PlayerBalance | null>(null);
  private destroy$ = new Subject<void>();

  getBalance(): Observable<PlayerBalance | null> {
    return this.balance$.asObservable();
  }

  refreshBalance(playerId: number): void {
    this.http.get<PlayerBalance>(`${this.apiUrl}/${playerId}/balance`).pipe(
      takeUntil(this.destroy$),
      catchError(error => {
        console.error('Balance fetch failed:', error);
        return of(null);
      })
    ).subscribe(balance => this.balance$.next(balance));
  }

  ngOnDestroy(): void {
    this.destroy$.next();
    this.destroy$.complete();
  }
}

Key Concepts

Concept Usage Example
Standalone All new components standalone: true in decorator
Cleanup Every subscription takeUntil(this.destroy$)
State Service-level state BehaviorSubject<T>
Performance List rendering trackBy + OnPush
Forms All user input Reactive forms with FormGroup

Common Patterns

HTTP with Error Handling

When: Any API call

this.http.post<Resource>(this.apiUrl, request).pipe(
  catchError(error => {
    console.error('Create failed:', error);
    return throwError(() => error);
  })
);

Form with Validation

When: User data entry

this.form = this.fb.group({
  email: ['', [Validators.required, Validators.email]],
  amount: [null, [Validators.required, Validators.min(0)]]
});

See Also

  • hooks - Lifecycle hooks and cleanup patterns
  • components - Component structure and standalone patterns
  • data-fetching - HTTP services and caching
  • state - BehaviorSubject and state management
  • forms - Reactive forms and validation
  • performance - OnPush, trackBy, and optimization
  • See the typescript skill for type definitions and interfaces
  • See the spring-boot skill for backend API patterns
  • See the playwright skill for E2E testing
  • See the frontend-design skill for CSS and UI patterns