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 相关文章推荐
JavaScript 组件之旅(一)分析和设计
Oct 28 Javascript
兼容IE与firefox火狐的回车事件(js与jquery)
Oct 20 Javascript
关于使用 jBox 对话框的提交不能弹出问题解决方法
Nov 07 Javascript
理解javascript中try...catch...finally
Dec 25 Javascript
省市二级联动小案例讲解
Jul 24 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
Dec 28 Javascript
bootstrap实现的自适应页面简单应用示例
Mar 09 Javascript
jquery实现楼层滚动效果
Jan 01 jQuery
vue多层嵌套路由实例分析
Mar 19 Javascript
Emberjs 通过 axios 下载文件的方法
Sep 03 Javascript
vscode 调试 node.js的方法步骤
Sep 15 Javascript
echarts饼图各个板块之间的空隙如何实现
Dec 01 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
功能齐全的PHP发送邮件类代码附详细说明
2008/07/10 PHP
php array_map()数组函数使用说明
2011/07/12 PHP
JavaScript实现滚动栏效果的方法
2015/04/27 PHP
PHP生成json和xml类型接口数据格式
2015/05/17 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
js getElementsByTagName的简写方式
2010/06/27 Javascript
Javascript 检测键盘按键信息及键码值对应介绍
2013/01/03 Javascript
多种方法实现JS动态添加事件
2013/11/01 Javascript
js四舍五入数学函数round使用实例
2014/05/09 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
微信JS接口汇总及使用详解
2015/01/09 Javascript
JQuery鼠标移到小图显示大图效果的方法
2015/06/10 Javascript
js简单实现Select互换数据的方法
2015/08/17 Javascript
AngularJs 60分钟入门基础教程
2016/04/03 Javascript
简单实现js悬浮导航效果
2017/02/05 Javascript
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
2018/03/16 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
2019/01/21 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
python实现简易内存监控
2018/06/21 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
wxpython多线程防假死与线程间传递消息实例详解
2019/12/13 Python
opencv中图像叠加/图像融合/按位操作的实现
2020/04/01 Python
基于K.image_data_format() == 'channels_first' 的理解
2020/06/29 Python
大学生2014全国两会学习心得体会
2014/03/10 职场文书
小学班长竞选演讲稿
2014/04/24 职场文书
《放飞蜻蜓》教学反思
2014/04/27 职场文书
党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
2014年财务工作总结与计划
2014/12/08 职场文书
监守自盗观后感
2015/06/10 职场文书
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
2021/04/12 Python
利用Python实现翻译HTML中的文本字符串
2022/06/21 Python