@flywine93/ngx-autounsubscrb
Version:
Angular 9+ automatically unsubscribe to the RXJS decorator, It is lightweight and practical!!
171 lines (132 loc) • 5.1 kB
Markdown
# ngx-autounsubscrb
<img src="https://raw.githubusercontent.com/93Alliance/ngx-autounsubscrb/master/src/assets/ngx-autounsubscrb.png" width="750%" height="50%">
Angular 2+ **automatically** **unsubscribe** to the **RXJS** **decorator**, It is **lightweight** and practical!!
## Installation
```
npm i /ngx-autounsubscrb --save
```
## Usage
When using this decorator, you must implement the `OnDestroy` method.
- `` --- Unsubscribe member variable and temp variable when destroy.
eg.
```
import { MAutoAdd, AutoUnsubscrb } from '@flywine93/ngx-autounsubscrb';
...
```
or
```
import { MAutoAdd, AutoUnsubscrb } from '@flywine93/ngx-autounsubscrb';
export class Test implements OnInit, OnDestroy {
a: Subscription; // don't unsubscribe
}
```
The `a` member variable will be excluded.
- `MAutoAdd(target: any, subscrb: any)` --- Unsubscribe temporary variables when destroy.
- `target`: Class `this`
- `subscrb`: temporary variable
eg.
```
import { MAutoAdd, AutoUnsubscrb } from '@flywine93/ngx-autounsubscrb';
ngOnInit(): void {
// Manually add to the unsubscribe list through the MAutoAdd function and
// unsubscribe when the component is destroyed
MAutoAdd(this, this.observable$.pipe(tap(console.log)).subscribe());
}
```
### Component
eg. [source code](https://github.com/93Alliance/ngx-autounsubscrb/blob/master/src/app/test/test-cmp/test-cmp.component.ts)
```
import { Component, OnInit, OnDestroy } from '@angular/core';
import { Subscription, of, Observable, interval } from 'rxjs';
import { tap } from 'rxjs/operators';
import { MAutoAdd, AutoUnsubscrb } from '@flywine93/ngx-autounsubscrb';
export class TestCmpComponent implements OnInit, OnDestroy {
// test public member
a: Subscription; // don't unsubscribe
b: Subscription; // will unsubscribe
// test private member
private c: Subscription; // will unsubscribe
// test advance usage
private observable$: Observable<number> = interval(1000);
subscription$$: Subscription; // will unsubscribe
constructor() { }
ngOnInit(): void {
this.b = of(1).subscribe(() => { });
this.c = of(1).subscribe(() => { });
this.subscription$$ = this.observable$.pipe(tap(console.log)).subscribe();
// Manually add to the unsubscribe list through the MAutoAdd function and
// unsubscribe when the component is destroyed
MAutoAdd(this, this.observable$.pipe(tap(console.log)).subscribe());
}
ngOnDestroy(): void {
console.log('TestCmpComponent component destroy!');
}
}
```
### Directive
eg. [source code](https://github.com/93Alliance/ngx-autounsubscrb/blob/master/src/app/test/test-dir.directive.ts)
```
import { Directive, OnDestroy } from '@angular/core';
import { AutoUnsubscrb } from '@flywine93/ngx-autounsubscrb';
import { tap } from 'rxjs/operators';
import { Subscription, Observable, interval } from 'rxjs';
export class TestDirDirective implements OnDestroy {
subscription$$: Subscription; // will unsubscribe
observable$: Observable<number> = interval(1000); // don't unsubscribe
constructor() {
this.subscription$$ = this.observable$.pipe(tap(console.log)).subscribe();
}
ngOnDestroy(): void {
console.log('TestDirDirective directive destroy!');
}
}
```
### Service
eg. [source code](https://github.com/93Alliance/ngx-autounsubscrb/blob/master/src/app/test/test-prov.service.ts)
```
import { Injectable, OnDestroy } from '@angular/core';
import { AutoUnsubscrb } from '@flywine93/ngx-autounsubscrb';
import { tap } from 'rxjs/operators';
import { Subscription, Observable, interval } from 'rxjs';
export class TestProvService implements OnDestroy {
subscription$$: Subscription; // will unsubscribe
observable$: Observable<number> = interval(1000); // don't unsubscribe
constructor() {
this.subscription$$ = this.observable$.pipe(tap(console.log)).subscribe();
}
ngOnDestroy(): void {
console.log('TestProvService service destroy!');
}
}
```
### Options
| Option | Description | Default Value |
| ----------- | ------------------------------------------------------ | ------------- |
| `checkArrVar` | check member variables of array type, if it is subscription array, will unsubscribe | `false` |
| `blackList` | an array of properties to exclude | `[]` |
### Tooltip
Do not create `autoAddList` member variables in component, directive, or service; this will be fixed in a later release.