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实现简单的拖拽效果实例兼容所有主流浏览器
Jun 21 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
Sep 25 Javascript
js触发onchange事件的方法说明
Mar 08 Javascript
原生js制作简单的数字键盘
Apr 24 Javascript
AngularJS基础学习笔记之表达式
May 10 Javascript
javascript获取select值的方法分析
Jul 02 Javascript
jQuery简单获取键盘事件的方法
Jan 22 Javascript
AngularJS入门心得之directive和controller通信过程
Jan 25 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
Aug 05 Javascript
angularjs实现猜大小功能
Oct 23 Javascript
基于jquery.page.js实现分页效果
Jan 01 jQuery
动态加载JavaScript文件的3种方式
May 05 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类分享
2014/02/07 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
2017/03/14 PHP
PHP排序二叉树基本功能实现方法示例
2018/05/26 PHP
jQuery插件开发的两种方法及$.fn.extend的详解
2014/01/16 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
Vue.js学习之计算属性
2017/01/22 Javascript
vue.js删除动态绑定的radio的指定项
2017/06/02 Javascript
vue.js响应式原理解析与实现
2020/06/22 Javascript
解决Vue调用springboot接口403跨域问题
2019/09/02 Javascript
js实现鼠标点击页面弹出自定义文字效果
2019/12/24 Javascript
python对数组进行反转的方法
2015/05/20 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
老生常谈进程线程协程那些事儿
2017/07/24 Python
Python实现的桶排序算法示例
2017/11/29 Python
分享一下Python数据分析常用的8款工具
2018/04/29 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
python 求某条线上特定x值或y值的点坐标方法
2019/07/09 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
django从后台返回html代码的实例
2020/03/11 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
html5如何在Canvas中实现自定义路径动画示例
2017/09/18 HTML / CSS
Rockport乐步美国官网:风靡美国的白宫鞋
2016/11/24 全球购物
波兰化妆品和护肤品购物网站:eKobieca
2019/08/30 全球购物
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
工商管理专业实习大学生自我鉴定
2013/09/19 职场文书
党校培训思想汇报
2013/12/30 职场文书
2014副镇长民主生活会个人对照检查材料思想汇报
2014/09/30 职场文书
小学生安全保证书
2015/05/09 职场文书
黄埔军校观后感
2015/06/10 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书
uniapp引入支付宝原生扫码插件步骤详解
2022/07/23 Javascript