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 相关文章推荐
transport.js和jquery冲突问题的解决方法
Feb 10 Javascript
jquery实现多条件筛选特效代码分享
Aug 28 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
Sep 06 Javascript
再谈JavaScript异步编程
Jan 27 Javascript
jQuery学习之DOM节点的插入方法总结
Jan 22 Javascript
canvas绘制的直线动画
Jan 23 Javascript
微信小程序 监听手势滑动切换页面实例详解
Jun 15 Javascript
JS判断非空至少输入两个字符的简单实现方法
Jun 23 Javascript
教你搭建按需加载的Vue组件库(小结)
Jul 29 Javascript
JavaScript实现简易聊天对话框(加滚动条)
Feb 10 Javascript
Vue组件间数据传递的方式(3种)
Jul 13 Javascript
vue打包时去掉所有的console.log
Apr 10 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中GET变量的使用
2006/10/09 PHP
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
php网页标题中文乱码的有效解决方法
2014/03/05 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
php压缩文件夹最新版
2018/07/18 PHP
Laravel如何自定义command命令浅析
2019/03/23 PHP
prototype 1.5 &amp; scriptaculous 1.6.1 学习笔记
2006/09/07 Javascript
js删除所有的cookie的代码
2010/11/25 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
Ajax 加载数据 练习代码
2017/01/05 Javascript
Vue实现选择城市功能
2017/05/27 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
vue中使用input[type=&quot;file&quot;]实现文件上传功能
2018/09/10 Javascript
详解微信小程序之scroll-view的flex布局问题
2019/01/16 Javascript
Vue2.0实现简单分页及跳转效果
2019/07/29 Javascript
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
2020/04/24 Javascript
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
Python-基础-入门 简介
2014/08/09 Python
python获取从命令行输入数字的方法
2015/04/29 Python
python3 实现的人人影视网站自动签到
2016/06/19 Python
Python中字典的setdefault()方法教程
2017/02/07 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
python+selenium+autoit实现文件上传功能
2017/08/23 Python
美国健康和保健平台:healtop
2020/07/02 全球购物
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
C#公司笔试题
2014/03/28 面试题
公司委托书格式范文
2014/10/09 职场文书
省委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
会计工作检讨书
2015/02/19 职场文书
护士心得体会范文
2016/01/25 职场文书
解决Go gorm踩过的坑
2021/04/30 Golang
教你用Java Swing实现自助取款机系统
2021/06/11 Java/Android
Golang并发工具Singleflight
2022/05/06 Golang
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers