Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/angularconsulting/rx-service

Enhance your application services with Rx Service. This is simple and powerful library adds reactivity and consistency to your services while streamlining component communication. Based on the reliable RxJS BehaviorSubject, it's the perfect solution for powering up your application πŸ±πŸ¦Έβ€β™‚οΈ
https://github.com/angularconsulting/rx-service

angular component-communication reactive reactive-services reactive-streams rxjs state-management

Last synced: 1 day ago
JSON representation

Enhance your application services with Rx Service. This is simple and powerful library adds reactivity and consistency to your services while streamlining component communication. Based on the reliable RxJS BehaviorSubject, it's the perfect solution for powering up your application πŸ±πŸ¦Έβ€β™‚οΈ

Awesome Lists containing this project

README

        

# πŸ”₯ Rx Service

Enhance your application services with Rx Service. This is a simple yet powerful library that adds reactivity and consistency to your services while streamlining component communication within your application using the reliable RxJS BehaviorSubject πŸ±πŸ¦Έβ€β™‚οΈ

## πŸ‘¨β€πŸ’» Example

### service
``` typescript
import { Injectable } from '@angular/core';
import { Rx } from 'rx-service';

interface Counter {
value: number;
}

const initialState: Counter = { value: 0 };

@Injectable({
providedIn: 'root',
})
export class CounterService extends Rx {
constructor() {
super(initialState);
}
}
```
### component class
``` typescript
import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { CounterService } from './counter.service';

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class AppComponent implements OnInit {
counter$!: Observable;
constructor(private service: CounterService) {}

ngOnInit(): void {
this.counter$ = this.service.state$.pipe(map((x) => x.value));
}

update(value: number): void {
this.service.setState((state) => ({ value: state.value + value }));
}
}
```
### component template
``` html
-1
{{ counter$ | async }}
+1
```

## πŸ’‘ Also you can just use primitives
``` typescript
import { Rx } from "rx-service";

const initialState = 0;

export class CounterService extends Rx {
constructor() {
super(initialState);
}
}
```

## 🧹 Clean up subscriptions for edge cases
``` typescript

import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';
import { RxCleanup } from 'rx-service';
import { takeUntil } from 'rxjs';
import { CounterService } from './counter.service';

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class AppComponent implements OnInit {
constructor(
private service: CounterService,
private readonly cleanup$: RxCleanup
) {}

ngOnInit(): void {
this.service.state$
.pipe(
// more operators here
takeUntil(this.cleanup$)
)
.subscribe((result) => {
// more magic here
});
}
}
```

## πŸ§žβ€β™‚οΈ Install
```
yarn add rx-service
```
or
```
npm i rx-service
```
created by [angularconsulting.au](https://angularconsulting.au)