TypeScript icon, indicating that this package has built-in type declarations

10.0.0 • Public • Published

🦁 Unsubscribe For Pros

A neat way to unsubscribe from observables when the component destroyed

@ngneat/until-destroy npm

Compatibility with Angular Versions

@ngneat/until-destroy Angular
8.x >= 10.0.5 < 13
9.x >= 13

Table of contents

Use with Ivy

npm install @ngneat/until-destroy
# Or if you use yarn
yarn add @ngneat/until-destroy
import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';

export class InboxComponent {
  ngOnInit() {

You can set the checkProperties option to true if you want to unsubscribe from subscriptions properties automatically:

@UntilDestroy({ checkProperties: true })
export class HomeComponent {
  // We'll dispose it on destroy
  subscription = fromEvent(document, 'mousemove').subscribe();

You can set the arrayName property if you want to unsubscribe from each subscription in the specified array.

@UntilDestroy({ arrayName: 'subscriptions' })
export class HomeComponent {
  subscriptions = [
    fromEvent(document, 'click').subscribe(),
    fromEvent(document, 'mousemove').subscribe(),

  // You can still use the operator
  ngOnInit() {

You can set the blackList property if you don't want to unsubscribe from one or more subscriptions.

@UntilDestroy({ checkProperties: true, blackList: ['subscription1'] })
export class HomeComponent {
  // subscription1 will not be unsubscribed upon component destruction
  subscription1: Subscription;
  // subscription2 will be unsubscribed upon component destruction
  subscription2: Subscription;

  constructor() {
    this.subscription1 = new Subject().subscribe();
    this.subscription2 = new Subject().subscribe();

Use with Non-Singleton Services

export class InboxService {
  constructor() {

  providers: [InboxService],
export class InboxComponent {
  constructor(inboxService: InboxService) {}

All options, described above, are also applicable to providers.

Use with View Engine (Pre Ivy)

npm install ngx-take-until-destroy
# Or if you use yarn
yarn add ngx-take-until-destroy
import { untilDestroyed } from 'ngx-take-until-destroy';

export class InboxComponent implements OnDestroy {
  ngOnInit() {
      .subscribe(val => console.log(val));

  // This method must be present, even if empty.
  ngOnDestroy() {
    // To protect you, we'll throw an error if it doesn't exist.

Use with Any Class

import { untilDestroyed } from 'ngx-take-until-destroy';

export class Widget {
  constructor() {
    interval(1000).pipe(untilDestroyed(this, 'destroy')).subscribe(console.log);

  // The name needs to be the same as the second parameter
  destroy() {}

Migration from View Engine to Ivy

To make it easier for you to migrate, we've built a script that will update the imports path and add the decorator for you. The script is shipped as a separate package. Run the following command to install it:

npm i --save-dev @ngneat/until-destroy-migration
# Or if you use yarn
yarn add -D @ngneat/until-destroy-migration

Then run the following command:

npx @ngneat/until-destroy-migration --base my/path

base defaults to ./src/app.

You can use the --removeOnDestroy flag for empty OnDestroy methods removing.

npx @ngneat/until-destroy-migration --removeOnDestroy

You can remove the package once the migration is done.

Potential Pitfalls

  • The order of decorators is important, make sure to put @UntilDestroy() before the @Component() decorator.
  • When using overrideComponent in unit tests remember that it overrides metadata and component definition. Invoke UntilDestroy()(YourComponent); to reapply the decorator. See here for an example.

ESLint Rules


Thanks goes to these wonderful people (emoji key):

Netanel Basal

💻 📖 🤔

Artur Androsovych

💻 💡 🤔 🚇

Krzysztof Karol


Alex Malkevich


Khaled Shaaban




Dmitrii Korostelev


This project follows the all-contributors specification. Contributions of any kind welcome!

Package Sidebar


npm i @ngneat/until-destroy

Weekly Downloads






Unpacked Size

86.3 kB

Total Files


Last publish


  • netanel-ngneat
  • itayod
  • shahar.kazaz
  • overthesanity