vue实现的组件兄弟间通信功能示例


Posted in Javascript onDecember 04, 2018

本文实例讲述了vue实现的组件兄弟间通信功能。分享给大家供大家参考,具体如下:

兄弟组件间通信(event)

借助于一个公共的Vue的实例对象,不同的组件可以通过该对象完成事件的绑定和触发

var bus = new Vue();

bus.$emit()
bus.$on()

熊大想要发消息给熊二,

接收方(熊二):事件绑定

bus.$on('customEvent',function(msg){
//msg就是通过事件 传递来的数据
})

发送方(熊大):触发事件

bus.$emit('customEvent',123);

练习:

在熊二中 加上一个button,
点击按钮时告诉熊大:'快跑!'

接收方:事件绑定
发送方:触发事件

<!doctype html>
<html>
 <head>
 <meta charset="UTF-8">
 <title></title>
  <script src="https://cdn.bootcss.com/vue/2.0.1/vue.min.js"></script>
 </head>
 <body>
 <div id="container">
    <p>{{msg}}</p>
    <xiongda></xiongda>
    <hr>
    <xionger></xionger>
  </div>
  <script>
/*借助于一个公共的Vue的实例对象,不同的组件可以通过该对象完成事件的绑定和触发*/
//new一个对象,兄弟间的通信,将借助他事件绑定和触发来实现
  var bus = new Vue();
  //熊大发送消息给熊二
    //xiongda组件
    Vue.component("xiongda",{
      methods:{
        sendToXiongEr:function(){
        //给熊二发送消息
        //触发msgToXiongEr事件
          bus.$emit("msgToXiongEr","哈哈,光头强来了");
        }
      },
      template:`
        <div>
          <h1>我是熊大</h1>
          <button @click="sendToXiongEr">Click Me</button>
        </div>
      `
    })
//熊二组件
    Vue.component("xionger",{
      template:`
        <div>
          <h1>我是熊二</h1>
        </div>
      `,
      mounted:function(){
//      给该组件绑定一个自定义事件和对应的处理函数
        //调用bus中的on方法
        //事件的触发一般是接收数据然后处理
        var that = this;
          bus.$on("msgToXiongEr",function(msg){
            alert("自定义的事件触发,接收到的数据"+msg);
          })
      }
    })
    new Vue({
      el:"#container",
      data:{
        msg:"Hello VueJs"
      }
    })
  </script>
 </body>
</html>

使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试,可得到如下运行效果:

vue实现的组件兄弟间通信功能示例

改版:熊大在input输入数据传递给熊二

<!doctype html>
<html>
 <head>
 <meta charset="UTF-8">
 <title></title>
  <script src="https://cdn.bootcss.com/vue/2.0.1/vue.min.js"></script>
 </head>
 <body>
 <div id="container">
    <p>{{msg}}</p>
    <xiongda></xiongda>
    <hr>
    <xionger></xionger>
  </div>
  <script>
/*借助于一个公共的Vue的实例对象,不同的组件可以通过该对象完成事件的绑定和触发*/
//new一个对象,兄弟间的通信,将借助他事件绑定和触发来实现
  var bus = new Vue();
  //熊大发送消息给熊二
    //xiongda组件
    Vue.component("xiongda",{
      data:function(){
        return {
          xiongDaInput:""
        }
      },
      methods:{
        sendToXiongEr:function(){
        //给熊二发送消息
        //触发msgToXiongEr事件
          bus.$emit("msgToXiongEr",this.xiongDaInput);
          this.xiongDaInput = "";
        }
      },
      template:`
        <div>
          <h1>我是熊大</h1>
          <input type="text" v-model="xiongDaInput"/>
          <button @click="sendToXiongEr">Click Me</button>
        </div>
      `
    })
//熊二组件
    Vue.component("xionger",{
      data:function(){
        return{
          recvMsgIs:[]
        }
      },
      template:`
        <div>
          <h1>我是熊二</h1>
          <p v-for="tmp in recvMsgIs">{{tmp}}</p>
        </div>
      `,
      mounted:function(){
//      给该组件绑定一个自定义事件和对应的处理函数
        //调用bus中的on方法
        //事件的触发一般是接收数据然后处理
        var that = this;
          bus.$on("msgToXiongEr",function(msg){
            //alert("自定义的事件触发,接收到的数据"+msg);
              that.recvMsgIs.push(msg);
          })
      }
    })
    new Vue({
      el:"#container",
      data:{
        msg:"Hello VueJs"
      }
    })
  </script>
 </body>
</html>

感兴趣的朋友还可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码的运行效果。

希望本文所述对大家vue.js程序设计有所帮助。

Javascript 相关文章推荐
ExtJs3.0中Store添加 baseParams 的Bug
Mar 10 Javascript
Google AJAX 搜索 API实现代码
Nov 17 Javascript
jQuery中prevUntil()方法用法实例
Jan 08 Javascript
使用jQuery管理选择结果
Jan 20 Javascript
Jquery实现瀑布流布局(备有详细注释)
Jul 31 Javascript
jQuery实现自动切换播放的经典滑动门效果
Sep 12 Javascript
javascript 动态脚本添加的简单方法
Oct 11 Javascript
如何用RxJS实现Redux Form
Dec 29 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
Jan 18 Javascript
Javascript通过控制类名更改样式
May 24 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
Aug 17 Javascript
JavaScript实现图片放大预览效果
Nov 02 Javascript
微信小程序模板template简单用法示例
Dec 04 #Javascript
vue项目刷新当前页面的三种方法
Dec 04 #Javascript
微信小程序之swiper滑动面板用法示例
Dec 04 #Javascript
vue项目每30秒刷新1次接口的实现方法
Dec 04 #Javascript
详解webpack4之splitchunksPlugin代码包分拆
Dec 04 #Javascript
React Native中Mobx的使用方法详解
Dec 04 #Javascript
element ui table(表格)实现点击一行展开功能
Dec 04 #Javascript
You might like
基于PHP+Ajax实现表单验证的详解
2013/06/25 PHP
采用memcache在web集群中实现session的同步会话
2014/07/05 PHP
php中explode的负数limit用法分析
2015/02/27 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
PHP折半(二分)查找算法实例分析
2018/05/12 PHP
Display SQL Server Login Mode
2007/06/21 Javascript
jQuery实现的类flash菜单效果代码
2010/05/17 Javascript
JavaScript游戏之优化篇
2010/11/08 Javascript
jQuery中ajax的get()方法用法实例
2014/12/26 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
2015/11/11 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
javascript遍历json对象的key和任意js对象属性实例
2017/03/09 Javascript
bootstrap中selectpicker下拉框使用方法实例
2018/03/22 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
用原生 JS 实现 innerHTML 功能实例详解
2019/04/03 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
vue接口请求加密实例
2020/08/11 Javascript
[01:18:43]2014 DOTA2华西杯精英邀请赛5 24 iG VS DK
2014/05/25 DOTA
python读写ini文件示例(python读写文件)
2014/03/25 Python
python单元测试unittest实例详解
2015/05/11 Python
python批量制作雷达图的实现方法
2016/07/26 Python
centos6.4下python3.6.1安装教程
2017/07/21 Python
详解用python实现简单的遗传算法
2018/01/02 Python
python实现日常记账本小程序
2018/03/10 Python
详解Django-restframework 之频率源码分析
2019/02/27 Python
PyCharm-错误-找不到指定文件python.exe的解决方法
2019/07/01 Python
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
荷兰超市:DEEN
2018/03/14 全球购物
瑞典度假品牌:OAS
2019/05/28 全球购物
恶搞卫生巾广告词
2014/03/18 职场文书
标准的毕业生自荐信
2014/04/20 职场文书
南京导游词
2015/02/03 职场文书
2015年感恩节演讲稿(优选篇)
2015/03/20 职场文书
演讲比赛通讯稿
2015/07/18 职场文书
一文读懂navicat for mysql基础知识
2021/05/31 MySQL
Python selenium绕过webdriver监测执行javascript
2022/04/12 Python