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 1.5最新版本的改进细节分析
Jan 19 Javascript
判断javascript的数据类型(示例代码)
Dec 11 Javascript
javascript 实现map集合
Apr 03 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
Feb 18 Javascript
很棒的js选项卡切换效果
Jul 15 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
Dec 05 Javascript
基于vue中css预加载使用sass的配置方式详解
Mar 13 Javascript
jQuery实现的简单获取索引功能示例
Jun 04 jQuery
一个因@click.stop引发的bug的解决
Jan 08 Javascript
详解webpack引用jquery(第三方模块)的三种办法
Aug 21 jQuery
JavaScript React如何修改默认端口号方法详解
Jul 28 Javascript
Vue elementui字体图标显示问题解决方案
Aug 18 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
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
2011/08/02 PHP
Java中final关键字详解
2015/08/10 PHP
php链式操作的实现方式分析
2019/08/12 PHP
laravel执行php artisan migrate报错的解决方法
2019/10/09 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
2019/10/12 PHP
Hutia 的 JS 代码集
2006/10/24 Javascript
js的with语句使用方法
2007/09/21 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
js实现不提交表单获取单选按钮值的方法
2015/08/21 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
手动用webpack搭建第一个ReactApp的示例
2018/04/11 Javascript
bootstrap自定义样式之bootstrap实现侧边导航栏功能
2018/09/10 Javascript
浅谈Vue服务端渲染框架Nuxt的那些事
2018/12/21 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
Python中super的用法实例
2015/05/28 Python
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
python flask中静态文件的管理方法
2018/03/20 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
ubuntu16.04制作vim和python3的开发环境
2018/09/23 Python
python进阶之多线程对同一个全局变量的处理方法
2018/11/09 Python
基于Python共轭梯度法与最速下降法之间的对比
2020/04/02 Python
用Python在Excel里画出蒙娜丽莎的方法示例
2020/04/28 Python
用CSS3将你的设计带入下个高度
2009/08/08 HTML / CSS
HTML5和CSS3实例教程总结(推荐)
2016/07/18 HTML / CSS
玛蒂尔达简服装:Matilda Jane Clothing
2019/02/13 全球购物
城市规划毕业生求职信
2013/10/10 职场文书
金融专业银行实习证明模板
2014/11/28 职场文书
总经理检讨书范文
2015/02/16 职场文书
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS
为什么代码规范要求SQL语句不要过多的join
2021/06/23 MySQL
码云(gitee)通过git自动同步到阿里云服务器
2022/12/24 Servers