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 相关文章推荐
js滚动条多种样式,推荐
Feb 05 Javascript
使用正则替换变量
May 05 Javascript
select标签模拟/美化方法采用JS外挂式插件
Apr 01 Javascript
jQuery中fadeIn、fadeOut、fadeTo的使用方法(图片显示与隐藏)
May 08 Javascript
Jquery实现动态切换图片的方法
May 18 Javascript
JavaScript获取function所有参数名的方法
Oct 30 Javascript
自制微信公众号一键排版工具
Sep 22 Javascript
JavaScript获取短信验证码(周期性)
Dec 29 Javascript
jQuery中DOM节点的删除方法总结(超全面)
Jan 22 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
Feb 19 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
Mar 29 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
Dec 02 Vue.js
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
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
简单实现php上传文件功能
2017/09/21 PHP
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果
2011/11/30 Javascript
js中判断对象是否为空的三种实现方法
2013/12/23 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
Bootstrap前端开发案例二
2016/06/17 Javascript
js中遍历对象的属性和值的方法
2016/07/27 Javascript
Vue.js每天必学之表单控件绑定
2016/09/05 Javascript
浅析Jquery操作select
2016/12/13 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
解决Mac node版本升级失败的问题
2018/05/16 Javascript
js常见遍历操作小结
2019/06/06 Javascript
jquery 回调操作实例分析【回调成功与回调失败的情况】
2019/09/27 jQuery
js判断非127开头的IP地址的实例代码
2020/01/05 Javascript
JS数组的高级使用方法示例小结
2020/03/14 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
2020/09/07 Javascript
Vue使用CDN引用项目组件,减少项目体积的步骤
2020/10/30 Javascript
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
python使用正则表达式提取网页URL的方法
2015/05/26 Python
详解Python发送email的三种方式
2018/10/18 Python
python中bs4.BeautifulSoup的基本用法
2019/07/27 Python
python两个_多个字典合并相加的实例代码
2019/12/26 Python
django配置app中的静态文件步骤
2020/03/27 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
python实现斗地主分牌洗牌
2020/06/22 Python
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
澳大利亚最好的电动自行车:Leon Cycle
2020/12/19 全球购物
财务会计专业应届毕业生求职信
2013/10/18 职场文书
人事助理岗位职责
2013/11/18 职场文书
《画》教学反思
2014/04/14 职场文书
党员自我剖析材料
2014/08/31 职场文书
公安机关正风肃纪剖析材料
2014/10/10 职场文书
2014年底个人工作总结
2015/03/10 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers