agentsclimarketplace

Angular rxjs interop

Skill ComeOnOliver/skillshub/skills/HoangNguyen0403/agent-skills-standard/angular-rxjs-interop

Bridging Observables and Signals using toSignal and toObservable. Use when converting between RxJS Observables and Angular Signals. (triggers: toSignal, toObservable, takeUntilDestroyed, rxjs angular)From its SKILL.md

Install
npx -y skills add ComeOnOliver/skillshub --skill angular-rxjs-interop

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

SKILL.md

2.0 KB, 423 tokens by cl100k_base, as published. Nobody here has run it

RxJS Interop

Priority: P1 (HIGH)

Principles

  • Async to Sync: Use toSignal(observable$, { initialValue: defaultValue }) from @angular/core/rxjs-interop to convert Observables (HTTP, Events) to Signals for template rendering. Call in an injection context (class field or constructor). toSignal auto-unsubscribes on component destroy. Provide initialValue to avoid undefined.
  • Sync to Async: Use toObservable(this.query) when you need RxJS operators (debounceTime, switchMap, distinctUntilChanged) on a Signal. Then wrap back with toSignal() if rendering.
  • Auto-Unsubscribe: toSignal automatically unsubscribes.
  • Cleanup: Use takeUntilDestroyed() for manual subscriptions in injection contexts. For use outside, inject(DestroyRef) and call takeUntilDestroyed(destroyRef).

Guidelines

  • HTTP Requests:
    • GET: http.get<User[]>(...).pipe(catchError(() => of([]))) -> toSignal(..., { initialValue: [] }). Use in templates as {{ users() }}.
    • Consider httpResource() for simpler reactive HTTP in newer versions.
    • POST/PUT: Trigger explicit subscribe() or lastValueFrom().
  • Race Conditions: Handle async loading states. toSignal requires an initialValue or handles undefined.

Anti-Patterns

  • No manual subscribe in templates: Use toSignal() for Observables rendered in templates.
  • No BehaviorSubject for state: Replace with signal() + toObservable() for RxJS interop.
  • No global takeUntil: Use takeUntilDestroyed() scoped to the injection context. Never use a global Subject with takeUntil — it leaks if Subject is never completed.

References

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.