UNPKG

angular7-pubsub

Version:
119 lines (87 loc) 3.1 kB
# Pub/Sub Service for Angular 7 abd above (Now available for Angular 17 and above) A simple publisher/subscriber service. This repository is forked from angular-pubsub and the only reason I changed it was to use RXJs version 6 and above. and updated the angular packages. All credit goes to the owner and contributers of angular-pubsub repo. [![NPM](https://nodei.co/npm/angular7-pubsub.png?downloads=true&stars=true)](https://nodei.co/npm/angular7-pubsub/) ## Usage - Import service in your codes or download via npm or bower. `npm i --save angular7-pubsub` - Add module bundle to imports in your application. ```typescript ... import { PubSubModule } from 'angular7-pubsub'; // <= HERE @NgModule({ declarations: [ RootComponent, NavigationComponent, OverlayComponent ], imports: [ BrowserModule, FormsModule, HttpModule, PubSubModule.forRoot() // <= AND HERE ], providers: [], bootstrap: [RootComponent] }) ... ``` - And import service wherever you want ## Documentation ### Class Overview ```typescript declare class PubSubService { private events: Object; $pub(event: string, eventObject?: any): void; $sub(): undefined; $sub(event: string): Observable<any>; $sub(event: string, callback: (value: any) => void): Subscription; $sub(event: string, callback: (value: any) => void, error: (error: any) => void): Subscription; $sub(event: string, callback: (value: any) => void, error: (error: any) => void, complete: () => void): Subscription; } ``` #### PubSubService.$pub(event: string, eventObject?: any): void Publish event to all subscriber. etc. ```typescript export class OverlayComponent implements OnInit, OnDestroy { constructor(private pubsub: PubSubService) { } anyFunc(){ this.pubsub.$pub('pleaseCloseSidenav', 'helloIAmOverlay'); } } ``` #### PubSubService.$sub(event: string): Observable<any> Subscribe to channel. etc. ```typescript export class NavigationComponent implements OnInit, OnDestroy { closeSidenavSub: Subscription; openSidenavSub: Subscription; constructor(private pubsub: EventDispatcherService) { } ngOnInit() { // usage of $sub(event: string): <Observable<any>>; this.closeSidenavSub = this.pubsub.$sub('pleaseCloseSidenav').subscribe((from) => { this.sidenavOpened = false; }); // usage of $sub(event: string, callback: (value: any) => void, error?: (error: any) => void, complete?: () => void): Subscription; this.openSidenavSub = this.pubsub.$sub('pleaseOpenSidenav', (from) => { this.sidenavOpened = true; }); } ngOnDestroy() { this.closeSidenavSub.unsubscribe(); this.openSidenavSub.unsubscribe(); } ``` **See Changelog** ~~$sub method have one bug. RxJS Subscriber call subscribe method on start like Angular 1.x $scope.$watch.~~ ## Build the source Follow the steps to run the tests and build the source code. ```sh npm install npm test npm run build ``` Commands above will generate the ready to use bundles under the `./dist` folder.