Utilities > Custom Events


vue-geb 0.13


A Vue js Global Event Bus plugin using the power of Observable
    last commit 8 years ago
    41
    Stargazers

    Watchers
    41
    Open issues
    1
    1152
    Downloads

    Last 30 days
    42
    Releases
    5
    64
    Final Score

    Quality
    86
    Popularity
    8
    Maintenance
    100

    Vue-geb - Global Event Bus

    Vue-geb is a vue Global Event Bus plugin to help broadcast events across the app using the power of observables.

    Only add 5kb to the rxjs library.

    Demo

    Install

    npm install --save vue-geb
    

    Or

    yarn add vue-geb
    

    Use

    In your main.js :

    import geb from 'vue-geb'
    
    Vue.use(geb)
    

    Example usage with modals

    Basic usage

    Access the Observable bus:

    this.$geb.getBus() // Observable:Subject type 
    

    Emit Events in the bus:

    this.$geb.emit({object}) 
    

    Listen to the Events in the bus:

    this.sub = this.$geb.getBus().subscribe(data => {
          console.log(data)
          // Do anything you want with 'data'
      })
    

    Listen to specific Events in the bus:

    this.sub = this.$geb.getFilteredBus({id:'modal'}).subscribe(data => {
          console.log(data)
          // The callback is only called when an event is fired with at least the id attribute equal to 'modal'
      })
    

    Vue directive

    <button v-geb-click-emit="{id:'foo',payload:'Lorem'}">Send</button>
    

    Notice how we use this.sub = ... .subscribe(). You need to unsubscribe when your component unmount to avoid memory leaks.

    destroyed: function () {
                if(this.sub) {
                    this.sub.unsubscribe()
                }
            },
    

    Please check this example for a vue-geb modal usage.

    Advanced

    You can also access the same api as vm.$geb outside of vue context (same Event bus too):

    import { gebHandler } from 'vue-geb'
    
    gebHandler.emit({object}) 
    

    This is useful for vue-geb usage in a state management library or any other js file.

    Enjoy ! :)