← Back to list

cermontfrontendangular
by JuanDiego30
⭐ 0🍴 0📅 Jan 16, 2026
SKILL.md
name: cermont.frontend.angular description: | Angular standalone components, RxJS patterns, and reactive forms for frontend development. Use when: Building Angular components, services, guards, interceptors, or working with RxJS observables. triggers:
- Angular
- RxJS
- standalone
- OnPush
- interceptors
- guards allowed-tools: Read, Edit, Write, Glob, Grep, Bash role: secondary scope: frontend
Project Fit
| Attribute | Value |
|---|---|
| Applies to | frontend |
| Requires | Angular, pnpm |
| Not for this repo | React, Vue |
| Status | Secondary (use angular-best-practices as primary) |
Guardrails
Does NOT do:
- Install dependencies without user approval
- Modify pnpm-lock.yaml directly
Safety Checklist:
pnpm --filter @cermont/frontend lint
pnpm --filter @cermont/frontend test
# Rollback: git restore -SW .
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
Related Skills
- 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
Score
Total Score
50/100
Based on repository quality metrics
✓SKILL.md
SKILL.mdファイルが含まれている
+20
○LICENSE
ライセンスが設定されている
0/10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
○タグ
1つ以上のタグが設定されている
0/5
Reviews
💬
Reviews coming soon