打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
vue.js $emit/$on的用法和理解
userphoto

2019.06.11

关注

每个 Vue 实例都实现了事件接口

vm.$on( event, callback ):监听当前实例上的自定义事件。事件可以由vm.$emit触发。回调函数会接收所有传入事件触发函数的额外参数。

vm.$emit( event, […args] ):触发当前实例上的事件。附加参数都会传给监听器回调。

  

Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8" />  <title>Vue2-单一事件管理组件通信</title>  <script src="vue.js"></script>  <script type="text/javascript">  //准备一个空的实例对象  var Event = new Vue();  //组件A  var A = {    template: `      <div>        <span>我是A组件的数据->{{a}}</span>        <input type="button" value="把A数据传给C" @click = "send">      </div>    `,    methods: {      send () {        Event.$emit("a-msg", this.a);      }    },    data () {      return {        a: "我是a组件中数据"      }    }  };  //组件B  var B = {    template: `      <div>        <span>我是B组件的数据->{{a}}</span>        <input type="button" value="把B数据传给C" @click = "send">      </div>    `,    methods: {      send () {        Event.$emit("b-msg", this.a);      }    },    data () {      return {        a: "我是b组件中数据"      }    }  };  //组件C  var C = {    template: `      <div>        <h3>我是C组件</h3>        <span>接收过来A的数据为: {{a}}</span>        <br>        <span>接收过来B的数据为: {{b}}</span>      </div>    `,    mounted () {      //接收A组件的数据      Event.$on("a-msg", function (a) {        this.a = a;      }.bind(this));      //接收B组件的数据      Event.$on("b-msg", function (a) {        this.b = a;      }.bind(this));    },    data () {      return {        a: "",        b: ""      }    }  };  window.onload = function () {    new Vue({      el: "#box",      components: {        "dom-a": A,        "dom-b": B,        "dom-c": C      }    });  };  </script></head><body>  <div id="box">    <dom-a></dom-a>       <dom-b></dom-b>       <dom-c></dom-c>     </div></body></html>

Vuejs 用$emit与$on来进行跨页面之间的数据传输通信

新建bus.jsimport Vue from 'vue'export var bus = new Vue()App.vue里created方法里定义事件import { bus } from 'bus.js'// ...created () {  bus.$on('tip', (text) => {    alert(text)  })}Test.vue组件内调用import { bus } from 'bus.js' // ...bus.$emit('tip', '123')

备注:on和emit的事件必须是在一个公共的实例上,才能触发。

总结:

vue1.0中 vm.$dispatch 和 vm.$broadcast 被弃用,改用$emit,$on。  

父组件可以使用 props 把数据传给子组件;子组件可以使用 $emit 触发父组件的自定义事件。

vm.$emit( event, arg ) //触发当前实例上的事件;vm.$on( event, fn );//监听event事件后运行。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
vue父子传值,兄弟传值,子父传值详解
Vue事件总线(EventBus)使用详细介绍
vue中$emit与$on和BUS
三大前端框架,有哪个框架组件间交互像js的方法传值一样简单?
聊聊 VueJs 组件化编程
Vue.js 源码学习笔记
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服