VUE2.0学习记录——非父子组件之间的传值(BUS/总线/发布订阅者模式/观察者模式)

本文介绍了一个使用Vue.js的总线(Bus)模式进行非父子组件间通信的例子。通过创建一个全局的Vue实例作为消息中心,各组件可以发布和订阅事件,实现组件间的解耦与数据传递。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>非父子组件之间的传值(BUS/总线/发布订阅者模式/观察者模式)</title>
</head>
<body>
<div id="app">
    <child content="zhang"></child>
    <child content="san"></child>
</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    Vue.prototype.bus = new Vue();
    Vue.component('child',{
        props: ['content'],
        data: function(){
           return {
               selfContent:this.content
           }
        },
        template: '<div @click="handleClick">{{selfContent}}</div>',
        methods: {
            handleClick: function () {
                this.bus.$emit('change',this.selfContent);
            }
        },
        mounted: function () {
            var this_ = this;
            this.bus.$on('change',function (msg) {
                this_.selfContent = msg;
            })
        }
    });
    var app = new Vue({
        el: '#app',
        methods: {
            handleClick: function () {
                alert('click');
            }
        }
    });
</script>
</html>

 

<think>好的,我需要帮用户找到关于前端发布订阅模式的示意图和图解。首先,发布订阅模式是一种常见的设计模式,用于解耦发布者和订阅者,通常在前端用于事件处理、状态管理等场景。用户需要的是示意图,可能需要展示发布者、订阅者、事件总线之间的关系。 首先,我应该回想一下发布订阅模式的基本结构。通常,有一个事件中心(Event Bus)作为中介,发布者(Publisher)将事件发布到事件中心,而订阅者(Subscriber)向事件中心订阅特定的事件。当事件被触发时,事件中心会通知所有订阅了该事件的订阅者。这样的结构可以用简单的框图来表示,比如三个部分:发布者、事件中心、订阅者,箭头表示事件发布和通知的方向。 接下来,我需要考虑是否有现成的图解或示意图可以在站内引用。假设站内有一些资源,可能需要引用相关的文章或教程。例如,某篇讲解前端设计模式的文章可能包含这样的图解。我需要确保引用的正确性,并正确标注来源标识。 另外,用户可能需要示例代码来配合示意图理解模式的工作原理。通常,发布订阅模式的实现包括订阅方法(on)、发布方法(emit)、取消订阅方法(off)等。提供一个简单的JavaScript实现可能会有帮助,同时结合图解中的各个部分,说明代码中的每个部分对应图中的哪个角色。 可能还需要解释发布订阅模式的优势,比如解耦、可扩展性,以及在前端框架中的应用,比如Vue的事件总线或React中使用的事件库。这些实际应用的例子可以加强用户的理解,并展示示意图在实际开发中的用途。 用户的问题还提到需要生成相关问题,这可能需要考虑发布订阅模式与其他模式的区别,如观察者模式,或者如何实现一个事件总线,以及常见的应用场景有哪些。这些问题可以帮助用户进一步深入学习模式。 最后,需要确保回答符合系统级指令,使用正确的中文,数学公式用$...$,独立公式用$$...$$,但在这个问题中可能数学公式较少,主要关注代码和示意图。同时,回答结构要清晰,分步骤解释,并引用相关资源。</think>### 前端发布订阅模式示意图与图解 发布订阅模式(Pub/Sub)通过**事件中心**(Event Bus)解耦发布者与订阅者,实现事件的高效管理。以下是其核心结构和示意图描述: #### 1. 示意图说明 ``` +-------------+ 发布事件 +--------------+ | 发布者 | ------------------> | 事件中心 | | (Publisher) | <event> | (Event Bus) | +-------------+ +--------------+ | ^ | | 通知订阅者 v | +-------------+ | 订阅者 | | (Subscriber)| +-------------+ ``` - **发布者**:触发事件(如用户点击、数据更新),调用事件中心的`emit`方法。 - **事件中心**:维护事件与订阅者的映射关系,负责将事件分发给对应订阅者。 - **订阅者**:通过`on`方法注册事件回调函数,接收事件通知[^1]。 #### 2. 代码示例 ```javascript class EventBus { constructor() { this.events = {}; } // 订阅事件 on(eventName, callback) { this.events[eventName] = this.events[eventName] || []; this.events[eventName].push(callback); } // 发布事件 emit(eventName, data) { if (this.events[eventName]) { this.events[eventName].forEach(callback => callback(data)); } } // 取消订阅 off(eventName, callback) { if (this.events[eventName]) { this.events[eventName] = this.events[eventName].filter(fn => fn !== callback); } } } // 使用示例 const bus = new EventBus(); bus.on('message', (data) => console.log(`收到消息:${data}`)); bus.emit('message', 'Hello Pub/Sub!'); // 输出:收到消息:Hello Pub/Sub! ``` #### 3. 应用场景 - **跨组件通信**:Vue 2.x 中使用`EventBus`实现非父子组件通信[^2]。 - **状态管理**:Redux 的中间件或轻量级状态通知机制。 - **异步任务协调**:多个模块依赖同一数据源的更新通知。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值