Vue.js 3 Event Bus

前端 未结 3 2048
粉色の甜心
粉色の甜心 2020-12-10 05:52

How to create Event Bus in Vue 3?


In Vue 2, it was:

export const bus = new Vue();


        
3条回答
  •  萌比男神i
    2020-12-10 06:07

    On version 3 of Vue.js, you can use either a third-party library, or use the functionality written in the publisher-subscriber(PubSub concept) programming pattern.

    event.js

    //events - a super-basic Javascript (publish subscribe) pattern
    
    class Event{
        constructor(){
            this.events = {};
        }
    
        on(eventName, fn) {
            this.events[eventName] = this.events[eventName] || [];
            this.events[eventName].push(fn);
        }
    
        off(eventName, fn) {
            if (this.events[eventName]) {
                for (var i = 0; i < this.events[eventName].length; i++) {
                    if (this.events[eventName][i] === fn) {
                        this.events[eventName].splice(i, 1);
                        break;
                    }
                };
            }
        }
    
        trigger(eventName, data) {
            if (this.events[eventName]) {
                this.events[eventName].forEach(function(fn) {
                    fn(data);
                });
            }
        }
    }
    
    export default new Event();
    

    index.js

    import Vue from 'vue';
    import $bus from '.../event.js';
    
    const app = Vue.createApp({})
    app.config.globalProperties.$bus = $bus;
    

提交回复
热议问题