您的位置:首页 > 健康 > 美食 > 东莞常平房价_国际公司英语翻译_网站外链购买平台_三只松鼠的软文范例

东莞常平房价_国际公司英语翻译_网站外链购买平台_三只松鼠的软文范例

2025/5/15 22:50:48 来源:https://blog.csdn.net/qq_25416827/article/details/143609107  浏览:    关键词:东莞常平房价_国际公司英语翻译_网站外链购买平台_三只松鼠的软文范例
东莞常平房价_国际公司英语翻译_网站外链购买平台_三只松鼠的软文范例

Vue 2 自定义插件(事件总线实现)

在 Vue 2 中,可以通过事件总线来实现全局通信。以下是创建一个简单事件总线插件的步骤:

  1. 创建插件文件 eventBus.js

// eventBus.js
import Vue from 'vue';const EventBus = new Vue();export default {install(Vue) {Vue.prototype.$bus = EventBus;  // 将 EventBus 添加到 Vue 原型上},
};

2.在主文件中引入插件并使用

// main.js
import Vue from 'vue';
import App from './App.vue';
import EventBus from './eventBus';Vue.use(EventBus);new Vue({render: (h) => h(App),
}).$mount('#app');

3.在组件中使用

  • 触发事件

this.$bus.$emit('my-event', { data: 'Hello, World!' });

监听事件

this.$bus.$on('my-event', (payload) => {console.log(payload.data);
});

Vue 3 自定义插件(使用 provideinject 实现)

在 Vue 3 中推荐使用 provideinject API 来进行全局通信,可以实现更灵活的插件结构。

  1. 创建插件文件 eventBus.js

// eventBus.js
import { reactive } from 'vue';const EventBus = reactive({events: {},on(event, callback) {if (!this.events[event]) {this.events[event] = [];}this.events[event].push(callback);},off(event, callback) {if (!this.events[event]) return;this.events[event] = this.events[event].filter(cb => cb !== callback);},emit(event, payload) {if (!this.events[event]) return;this.events[event].forEach(callback => callback(payload));},
});export default {install(app) {app.provide('eventBus', EventBus);},
};

2.在主文件中引入插件并使用

// main.js
import { createApp } from 'vue';
import App from './App.vue';
import EventBus from './eventBus';const app = createApp(App);
app.use(EventBus);
app.mount('#app');

3.在组件中使用

  • 触发事件:

  • import { inject } from 'vue';setup() {const eventBus = inject('eventBus');function triggerEvent() {eventBus.emit('my-event', { data: 'Hello, World!' });}return { triggerEvent };
    }
    

    监听事件:

import { inject, onMounted, onUnmounted } from 'vue';setup() {const eventBus = inject('eventBus');function handleEvent(payload) {console.log(payload.data);}onMounted(() => {eventBus.on('my-event', handleEvent);});onUnmounted(() => {eventBus.off('my-event', handleEvent);});
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com