Learn-skills.dev angular-ecosystem
Useful Angular libraries, tools, and ecosystem references for Angular development.
install
source · Clone the upstream repo
git clone https://github.com/NeverSight/learn-skills.dev
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/NeverSight/learn-skills.dev "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/skills-md/7spade/black-tortoise/angular-ecosystem" ~/.claude/skills/neversight-learn-skills-dev-angular-ecosystem && rm -rf "$T"
manifest:
data/skills-md/7spade/black-tortoise/angular-ecosystem/SKILL.mdsource content
SKILL: Angular 20+ Ecosystem Master Guide
This master skill document consolidates Angular Core, v20 Control Flow, Signals, CDK, Material 3, Router, Forms, Google Maps, NgRx Signals, and RxJS Patterns into a unified architecture reference.
🏗️ 1. Core Architecture: Standalone & Zone-less
Component Standards
- Standalone components only: Use
.standalone: true - OnPush Change Detection: Every component must use
.changeDetection: ChangeDetectionStrategy.OnPush - Signals-first: Use
,input()
,output()
,model()
, andviewChild()
(Angular 19+ syntax).contentChild() - Control Flow: Use
,@if
,@for (item of items; track item.id)
, and@switch
. Avoid@defer
,*ngIf
.*ngFor
Dependency Injection
- Use
instead of constructor injection for cleaner, more modern code.inject(Type) - Provide global services/tokens in
.app.config.ts
🚦 2. State Management: NgRx Signals
The signalStore
Pattern
signalStore- Centralized State: Define a single
per feature module or bounded context.signalStore - withState: Initialize with plain objects (use
instead ofnull
).undefined - withComputed: Derived state should be pure and reactive.
- withMethods: Handle business logic and state transitions.
Async Operations with rxMethod
rxMethod- Use
for async side effects (API calls).rxMethod - Concurrency Control: Choose the right operator:
: For searches, filters (cancels previous).switchMap
: For form submissions (ignores concurrent clicks).exhaustMap
: For ordered sequential operations.concatMap
: For independent parallel operations.mergeMap
- Always use
fromtapResponse
for structured error handling.@ngrx/operators
🧱 3. UI Component Layer: Angular Material 3 & CDK
Material Design 3 (M3)
- Token-based theming: Use M3 design tokens (
) and CSS variables.--mat-sys-... - Global Styles: Defined in
using the modern SASS mixins.styles.scss - Forms: Use
with standard validation patterns.<mat-form-field>
Angular CDK (Component Dev Kit)
- A11y: Use
,A11yModule
, andFocusTrap
for accessible experiences.LiveAnnouncer - Overlays: Use
for custom dialogs, tooltips, and floating UI.OverlayModule - Virtual Scroll: Use
for large lists (>100 items).CdkVirtualScrollViewport - Drag & Drop: Use
for list reordering and board layouts.@angular/cdk/drag-drop
🗺️ 4. Navigation & Mapping
Angular Router
- Lazy Loading: Always use
.loadChildren: () => import(...) - Functional Guards: Replace class-based guards with functions using
.inject() - Reactive Params: Convert route parameters to signals using
.toSignal(route.params)
Google Maps integration
- Lazy Loading: Load API script dynamically via a service.
- API Key Security: Store keys in
(never hardcode).environment.ts - Marker Clustering: Required for >50 markers to maintain performance.
🧪 5. RxJS & Signals Interop
The Boundary Pattern
- Infrastructure/Ports: Return Observables from repositories (for stream-based data).
- Application/Facade: Convert to Signals using
.toSignal() - Cleanup: Use
ortakeUntilDestroyed()
to ensure automatic unsubscription.toSignal() - Expensive Streams: Use
.shareReplay({ bufferSize: 1, refCount: true })
📋 6. Form Handling: Reactive & Typed
- Strictly Typed: Use
,FormGroup<T>
.FormControl<T> - Validation: Show errors only after
.touched - Signals Sync: Update the store via
or explicit submission methods.onChanges
♿ 7. Accessibility (A11y)
- WCAG 2.2 Level AA: Minimum requirement.
- Semantic HTML: Prioritize
,<nav>
,<main>
,<header>
.<footer> - Keyboard Navigation: Ensure
and focus management are solid.tabindex - ARIA: Use
,aria-label
, andaria-describedby
where native HTML is insufficient.aria-live
Note: This document is the source of truth for all Angular-related development in Black-Tortoise. Non-compliant code will be rejected by the CI pipeline.