Import `takeUntilDestroyed` from `@angular/core/rxjs-interop` and place it in the Observable pipeline before subscribing: ```typescript import { Component, DestroyRef, inject } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { ClockService } from './clock.service'; @Component({ selector: 'app-clock', template: `{{ latestTime }}`, }) export class ClockComponent { private readonly destroyRef = inject(DestroyRef); latestTime = ''; constructor(private...
Scanned 9/5/2026
Install to Claude Code
npx -y skills add HoangNguyen0403/agent-skills-standard --skill angular-rxjs-interop --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Angular Rxjs Interop?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/hoangnguyen0403-angular-rxjs-interop-002c8c94)More formats (shields.io, HTML) on the badges page.
# Using `takeUntilDestroyed`
Import `takeUntilDestroyed` from `@angular/core/rxjs-interop` and place it in the Observable pipeline before subscribing:
```typescript
import { Component, DestroyRef, inject } from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { ClockService } from './clock.service';
@Component({
selector: 'app-clock',
template: `{{ latestTime }}`,
})
export class ClockComponent {
private readonly destroyRef = inject(DestroyRef);
latestTime = '';
constructor(private readonly clock: ClockService) {
this.clock.time$
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe((time) => {
this.latestTime = time;
});
}
}
```
The injected `DestroyRef` ties the subscription to this component's lifecycle. If the operator is used directly in a constructor or field initializer, Angular can infer the injection context and you can write `.pipe(takeUntilDestroyed())`. Pass the `DestroyRef` explicitly from `ngOnInit`, a helper, or any function that is not itself running in an injection context.
Use this for manual subscriptions to long-lived streams. For template data, `toSignal(observable$, { initialValue: ... })` is usually simpler and already performs the corresponding cleanup. Avoid using one global destroy `Subject`; lifecycle cleanup should be scoped to the individual Angular instance.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!