npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@pscoped/ngx-pub-sub

v6.0.1

Published

Event publish - subscribe mechanism as Angular service using Observable. You can publish your event along with any data to all the subscribers of your event. This library also supports historical published values for the subscribers.

Downloads

732

Readme

🔔 NgxPubSub 🔔

Note:

  • Please migrate to @pscoped/rxjs-pub-sub. You would just have to update imports; rest all the things (functions names, signatures, types, observables, etc.) would remain the same.
  • The current package just supports Angular; while @pscoped/rxjs-pub-sub is JavaScript framework agnostic. It supports all JavaScript framework like React, Angular, Vue, etc.
  • Going ahead, @pscoped/rxjs-pub-sub would be provided further support.

Event publish - subscribe mechanism as Angular service using Observable. You can publish your event along with any data to all the subscribers of your event (event identification is being done using event-name as string). This library also supports historical published values for the new subscribers.

Build Status npm npm npm PayPal Donate

Dependency Status devDependency Status codecov

Now supports Angular 16 as well!

| Angular | @pscoped/ngx-pub-sub | |-----------|-----------------------| till 15 | 5.0.0 16 | 6.0.0

Live Demo Link

What makes this package special?

  1. Simplicity

    • Publish you data
    service.publishEvent('eventName', data)
    • Subscribe to your event
    service.subscribe('eventName', (data: any) => { /* your callback */ })
  2. Unique feature

    • This service also supports historical values even for new subscribers.
    service.publishWithHistory('eventName', data)   /* new subscribers can have historical values */
    service.publishWithLast('eventName', data)      /* new subscribers can have last published value */

How to use

  1. Install the module.

    npm i @pscoped/ngx-pub-sub --save

    I had to scope ( @pscoped ) my package with something, because another package having similar name was already published for AngularJS (v 1.x)

  2. Import NgxPubSub module into your module

    import { NgxPubSubModule } from '@pscoped/ngx-pub-sub';
    
    @NgModule({
        ....
        imports: [
            .....
            NgxPubSubModule
        ],
        ....
    })
    export class AppModule {}
  3. Register the events if you'd like to support events with last or historical values.

    export class AppComponent {
        latestEvent = 'randomLast';
        historicalEvent = 'randomHistory';
    
        constructor(pubsubSvc: NgxPubSubService) {
            pubsubSvc.registerEventWithHistory(this.historicalEvent, 6);
            pubsubSvc.registerEventWithLastValue(this.latestEvent, undefined);
        }
    }
  4. Use NgxPubSubService and subscribe to your event.

    export class SubscriberComponent implements OnDestroy {
           
        subscription1: Subscription;
        subscription2: Subscription;
        subscription3: Subscription;
        myNumber1: number;
        myNumber2: number;
        myNumber3: number;
    
        constructor(private pubSub: NgxPubSubService) { }
    
        ngOnInit() {
            this.subscription1 = this.pubSub.subscribe('randomNormal',
                                    data => this.myNumber1 = data);
            this.subscription2 = this.pubSub.subscribe('randomHistory',
                                    data => this.myNumber2 = data);
            this.subscription3 = this.pubSub.subscribe('randomLast',
                                    data => this.myNumber3 = data);
        }
    
        ngOnDestroy() {
            this.subscription1.unsubscribe();
            this.subscription2.unsubscribe();
            this.subscription3.unsubscribe();
        }
    }
  5. And publish the event.

    export class PublisherComponent {
    
        normalEvent = 'randomNormal';
        historicalEvent = 'randomHistory';
        latestEvent = 'randomLast';
    
        random: number;
        constructor(private pubsub: NgxPubSubService) { }
    
        publish() {
            this.random = Math.floor(Math.random() * 100);
    
            this.pubsub.publishEvent(this.normalEvent, this.random);
            this.pubsub.publishWithHistory(this.historicalEvent, this.random);
            this.pubsub.publishWithLast(this.latestEvent, this.random);
        }
    }

Ground Rules

Note: Here normal event means event's data will be vanished if no subscriber is there at the time of publishing the event. Historical values or last value will not be provided to the subscribers for such events.

  1. An event has to be registered if last value or historical values have to be supported.
  2. Once event name is registered for a type (to support either normal, last value support or historical value support), the same name cannot be used to publish/subscribe for another type unless it is completed by someone.
  3. Normal events need not to be registered. If event is not found at the time of publishing or subscribing, the same will be registered as a normal event.
  4. You can register the events anywhere in your code, however, we recommand to have it at one place only, i.e. inside the root component of your application, like what you see in app.component.ts

If an event having name 'randomHistory' is registered to support historical values, the same event name cannot be used to register or publish event with other type (i.e. last value support or normal event) unless it is completed programmatically.

Below is how the demo application looks like.

Demo Screenshot

Developing and Contributing

The repository also comes with the demo application. Check the Github repo link.

Development server

git clone https://github.com/paritosh64ce/ngx-pub-sub.git
cd ngx-pub-sub
npm i
ng serve

This will start the server for the demo application.

Navigate to http://localhost:4200/. The app will automatically reload if you change any of the source files.

Running unit tests

  1. Run npm run test:lib to execute the ngx-pub-sub library test cases.
  2. Run npm run coverage:lib to generate the code-coverage report.

Make sure to update the tests if you submit a PR, the CI will be affected if any of the tests fails.

This project was generated with Angular CLI using Nrwl Nx.

Change Log

1.0.0 - 1.0.3:
Basic functionality and README file updates

2.0.0 Now subscribers can have last or historical values for the event published based on the type the event is registered with.

2.0.1 - 2.0.3 Dev-dependencies and README file updates

3.0.0 Dependencies updated with Angular 8

3.0.1 - 3.0.2 Removed deprecation attribute for getEventObservable, added funding to package.json

5.0.0 Compatible with Angular 15

6.0.0 Compatible with Angular 16

Like this work? Star this repository on GitHub

Support

Donate

Motivate, Become a sponsor and get your logo on README with a link to your site. Become a sponsor

Got any issue or some feature request on your mind? Post it here!

License

MIT @ paritosh64ce