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获取整个页面文档的实现代码
Dec 15 Javascript
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
May 19 Javascript
JQuery实现倒计时按钮具体方法
Nov 14 Javascript
浅析tr的隐藏和显示问题
Mar 05 Javascript
基于JavaScript实现屏幕滚动效果
Jan 18 Javascript
基于JavaScript实现验证码功能
Apr 01 Javascript
深入理解 JavaScript 中的 JSON
Apr 06 Javascript
jquery实现提示语淡入效果
May 05 jQuery
微信小程序中post方法与get方法的封装
Sep 26 Javascript
JS实现简易计算器
Feb 14 Javascript
ES6中Set和Map用法实例详解
Mar 02 Javascript
TypeScript 内置高级类型编程示例
Sep 23 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
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
2013/06/18 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
php猴子选大王问题解决方法
2015/05/12 PHP
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
2010/12/10 Javascript
jQuery版Tab标签切换
2011/03/16 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
2014/02/17 Javascript
20条学习javascript的编程规范的建议
2014/11/28 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
js实现简洁的滑动门菜单(选项卡)效果代码
2015/09/04 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
原生js jquery ajax请求以及jsonp的调用方法
2017/08/04 jQuery
vue.js中实现登录控制的方法示例
2018/04/23 Javascript
JS实现HTML页面中动态显示当前时间完整示例
2018/07/30 Javascript
深入理解JavaScript的值传递和引用传递
2018/10/24 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
JavaScript工具库MyTools详解
2020/01/01 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
Vue快速实现通用表单验证的方法
2020/02/24 Javascript
微信小程序picker组件两列关联使用方式
2020/10/27 Javascript
Python实现简易版的Web服务器(推荐)
2018/01/29 Python
python实现最小二乘法线性拟合
2019/07/19 Python
python  logging日志打印过程解析
2019/10/22 Python
Python序列类型的打包和解包实例
2019/12/21 Python
PyQt5如何将.ui文件转换为.py文件的实例代码
2020/05/26 Python
收藏!10个免费高清视频素材网站!【设计、视频剪辑必备】
2021/03/18 杂记
html5+svg学习指南之SVG基础知识
2014/12/17 HTML / CSS
HTML5 Canvas中使用用路径描画圆弧
2015/01/01 HTML / CSS
sealed修饰符是干什么的
2012/10/23 面试题
顶撞领导检讨书
2014/01/29 职场文书
财务管理职业生涯规划书
2014/02/26 职场文书
班级标语大全
2014/06/21 职场文书
学习型家庭事迹材料
2014/12/20 职场文书
详细总结Python常见的安全问题
2021/05/21 Python
Python实现Hash算法
2022/03/18 Python
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js