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 相关文章推荐
瀑布流布局并自动加载实现代码
Mar 12 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
Jul 09 Javascript
Script标签与访问HTML页面详解
Jan 10 Javascript
js中settimeout方法加参数的使用实例
Feb 27 Javascript
多引号嵌套的变量命名的问题
May 09 Javascript
一个获取第n个元素节点的js函数
Sep 02 Javascript
javascript解析xml实现省市县三级联动的方法
Jul 25 Javascript
JQ实现新浪游戏首页幻灯片
Jul 29 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
May 13 Javascript
详解Vue.js使用Swiper.js在iOS
Sep 10 Javascript
JavaScript this绑定过程深入详解
Dec 07 Javascript
jQuery实现简单日历效果
Jul 05 jQuery
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
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 获取文件权限函数介绍
2013/07/11 PHP
搭建自己的PHP MVC框架详解
2017/08/16 PHP
PHP dirname简单使用代码实例
2020/11/13 PHP
JS中简单的实现像C#中using功能(有源码下载)
2007/01/09 Javascript
JavaScript面向对象编程
2008/03/02 Javascript
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
2014/04/23 Javascript
Javascript字符串对象的常用方法简明版
2014/06/26 Javascript
JQuery操作元素的css样式
2015/03/09 Javascript
jquery.validate提示错误信息位置方法
2016/01/22 Javascript
Bootstrap 组件之按钮(二)
2016/05/11 Javascript
javascript小数精度丢失的完美解决方法
2016/05/31 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
2016/12/08 Javascript
JS实现css hover操作的方法示例
2017/04/07 Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
2017/06/25 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
初学Python函数的笔记整理
2015/04/07 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
Python绑定方法与非绑定方法详解
2017/08/18 Python
django之跨表查询及添加记录的示例代码
2018/10/16 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
python使用for...else跳出双层嵌套循环的方法实例
2020/05/17 Python
Django2.1.7 查询数据返回json格式的实现
2020/12/29 Python
收集的7个CSS3代码生成工具
2010/04/17 HTML / CSS
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
什么是SCM(软件配置管理)
2014/08/16 面试题
实习期自我鉴定
2013/10/11 职场文书
大三学生做职业规划:给未来找个方向
2014/02/24 职场文书
中班下学期幼儿评语
2014/12/30 职场文书
海上钢琴师的观后感
2015/06/11 职场文书
浅谈python数据类型及其操作
2021/05/25 Python
MySQL空间数据存储及函数
2021/09/25 MySQL
分享python函数常见关键字
2022/04/26 Python