vue中$refs, $emit, $on, $once, $off的使用详解


Posted in Javascript onMay 26, 2019

1.$refs的使用场景

父组件调用子组件的方法,可以传递数据。

父组件:

<div id="app">
  <child-a ref="child"></child-a>
  <button @click="getMyEvent">点击父组件</button>
<div>

<script>
  import ChildA from './child.vue'
  
  export default{
    components:{
      ChildA
    },
    data(){
      return {
        msg:'我是父组件的数据'
      }
    },
    methods:{
      getMyEvent(){
        //调用子组件的方法,child是上边ref起的名字,emitEvent是子组件的方法。
        this.$refs.child.emitEvent(this.msg)
      }
    }
  }
</script>

子组件:

<template>
  <button>点击我</button>
</template>
<script>
  export default{
    methods:{
      emitEvent(msg){
        console.log('接收的数据------'+msg)
      }
    }
  }
</script>

2.$emit的使用

子组件调用父组件的方法并传递数据。

子组件:

<template>
  <button @click="emitEvent">点击我</button>
</template>
<script>
  export default{
    data(){
      return{
        msg:'我是子组件的数据'
      }
    },
    methods:{
      emitEvent(){
        //通过按钮的点击事件触发方法,然后用$emit触发一个my-event的自定义方法,传递this.msg数据。
        this.$emit('my-event',this.msg)
      }
    }
  }
</script>

父组件:

<template>  
  <div id="app">
    <child-a @my-event="getMyEvent"></child-a>
    //父组件通过监测my-event事件执行一个方法,然后取到子组件中传递过来的值。
  </div>
</template>
<script>
  import childA from './child.vue';
  export default {
    components:{
      childA
    },
    methods:{
      getMyEvent(msg){
       console.log('接收数据---'+msg);
       //接收数据,我是子组件的数据
      }
    }
  }
</script>

3.$on的使用场景

兄弟组件之间相互传递数据。

首先创建一个Vue的空白实例(兄弟组件的桥梁)

import Vue from 'vue';
export default new Vue();

子组件A:发送放使用$emit自定义事件把数据带过去。

<template>
  <div>
    <span>A组件-{{msg}}</span>
    <input type="button" value="把A组件数据传递给B" @click="send">
  </div>
</template>
<script>
  import eventBus from './eventBus';
  export default{
    data(){
      return{
        msg:{
          a:'111',
          b:'222'
        }
      }
    },
    methods:{
      send(){
        eventBus.$emit('aevent',this.msg)
      }
    }
  }
</script>

子组件B:接收方通过$on监听自定义事件的callback接收数据

<template>
  <div>
    <span>B组件,A传的数据为--{{msg}}</span>
  </div>
</template>
<script>
  import eventBus from './eventBus.vue'
  export default {
    data(){
      return{
        msg:''
      }
    },
    mounted(){
      eventBus.$on('aevent',(val)=>{//监听事件aevent,回调函数要使用箭头函数。
        console.log(val);//打印结果;我是a组件的数据。
      })
    }
  }
</script>

父组件:

<template>  
  <div>
    <childa></childa>
    <br/>
    <childb></childb>
  </div>
</template>
<script>
  import childa from './childa.vue';
  import childb from './childb.vue';
  export default{
    componets:{
      childa,
      childb
    },
    data(){
      return{
        msg:''
      }
    }
  }
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery事件机制扩展插件 jquery鼠标右键事件。
Dec 26 Javascript
动态改变div的z-index属性的简单实例
Aug 08 Javascript
php中给js数组赋值方法
Mar 10 Javascript
Node.js实现Excel转JSON
Apr 24 Javascript
利用Angular.js限制textarea输入的字数
Oct 20 Javascript
AngularJS封装指令方法详解
Dec 12 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
Apr 01 Javascript
详解Node项目部署到云服务器上
Jul 12 Javascript
Element输入框带历史查询记录的实现示例
Jan 15 Javascript
Node.js开发之套接字(socket)编程入门示例
Nov 05 Javascript
Vue组件通信中非父子组件传值知识点总结
Dec 05 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
Mar 10 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
May 26 #Javascript
vue指令做滚动加载和监听等
May 26 #Javascript
vxe-table vue table 表格组件功能
May 26 #Javascript
使用Vue.observable()进行状态管理的实例代码详解
May 26 #Javascript
微信小程序 swiper 组件遇到的问题及解决方法
May 26 #Javascript
vue项目打包后怎样优雅的解决跨域
May 26 #Javascript
vue实现的上拉加载更多数据/分页功能示例
May 25 #Javascript
You might like
php5中类的学习
2008/03/28 PHP
彻底杜绝PHP的session cookie错误
2009/08/09 PHP
php面向对象全攻略 (十七) 自动加载类
2009/09/30 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
PHP获取文本框、密码域、按钮的值实例代码
2017/04/19 PHP
js 日期转换成中文格式的函数
2009/07/07 Javascript
javascript jscroll模拟html元素滚动条
2012/12/18 Javascript
Extjs NumberField后面加单位实现思路
2013/07/30 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
js+div实现文字滚动和图片切换效果代码
2015/08/27 Javascript
整理Javascript函数学习笔记
2015/12/01 Javascript
jQuery实现手机上输入后隐藏键盘功能
2017/01/04 Javascript
Javascript Event(事件)的传播与冒泡
2017/01/23 Javascript
React利用插件和不用插件实现双向绑定的方法详解
2017/07/03 Javascript
微信小程序使用wxParse解析html的方法示例
2019/01/17 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
Ant Design Pro 之 ProTable使用操作
2020/10/31 Javascript
[01:24]DOTA2上海特锦赛OG战队抵达 专车接机入驻总统套房
2016/02/23 DOTA
[02:53]2018年度DOTA2最佳战队-完美盛典
2018/12/17 DOTA
[01:07:19]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第一场 1月19日
2021/03/11 DOTA
python发布模块的步骤分享
2014/02/21 Python
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
Python单元测试框架unittest使用方法讲解
2015/04/13 Python
玩转python爬虫之URLError异常处理
2016/02/17 Python
用python 批量更改图像尺寸到统一大小的方法
2018/03/31 Python
实例讲解python中的协程
2018/10/08 Python
Python企业编码生成系统之系统主要函数设计详解
2019/07/26 Python
djano一对一、多对多、分页实例代码
2019/08/16 Python
python django生成迁移文件的实例
2019/08/31 Python
Python类如何定义私有变量
2020/02/03 Python
html5 视频播放解决方案
2016/11/06 HTML / CSS
Tea Collection官网:一家位于旧金山的童装公司
2020/08/07 全球购物
医学生自我评价
2014/01/27 职场文书
2015年秋季灭鼠工作总结
2015/07/27 职场文书
公司员工培训管理制度
2015/08/04 职场文书
如何正确理解python装饰器
2021/06/15 Python