浅谈Vue.js 组件中的v-on绑定自定义事件理解


Posted in Javascript onNovember 17, 2017

每个 Vue 实例都实现了事件接口(Events interface),即:

使用 $on(eventName) 监听事件

使用 $emit(eventName) 触发事件

Vue的事件系统分离自浏览器的EventTarget API。尽管它们的运行类似,但是$on 和 $emit 不是addEventListener 和 dispatchEvent 的别名。

另外,父组件可以在使用子组件的地方直接用 v-on 来监听子组件触发的事件。

下面是一个文档上面的例子:

2017年4月11日更新

<div id="counter-event-example">
 <p>{{ total }}</p>
 <button-counter v-on:increment="incrementTotal"></button-counter>
 <button-counter v-on:increment="incrementTotal"></button-counter>
</div>


Vue.component('button-counter', {
 template: '<button v-on:click="increment">{{ counter }}</button>',
 data: function () {
  return {
   counter: 0
  }
 },
 methods: {
  increment: function () {
   this.counter += 1
   this.$emit('increment')
  }
 },
})
new Vue({
 el: '#counter-event-example',
 data: {
  total: 0
 },
 methods: {
  incrementTotal: function () {
   this.total += 1
  }
 }
})

跟着这个例子我来谈谈理解,更新以前我那种错误的思想

先画出理解的步骤,跟着步骤来进行理解

浅谈Vue.js 组件中的v-on绑定自定义事件理解

步骤1:

大家先看到这里,其实在步骤4里面的自定义标签经过渲染之后是变成了如 步骤一 一样的代码,所以我们应该从这里入手理解父子组件间事件绑定。在子组件里面把点击事件(click)绑定给了函数increment(即图片里面的步骤2),这里容易理解,即点击了子组件的按钮将会触发位于子组件的increment函数

步骤2与步骤3:

increment函数被触发执行,在步骤2里面执行了一句调用函数的语句

this.$emit('increment')

我们来看一下文档

vm.$emit( event, […args] ) : 触发当前实例上的事件。附加参数都会传给监听器回调

在这里是什么意思呢?按我自己的大白话就是这样说的:

通过这句函数可以让父组件知道子组件调用了什么函数,this.$emit(‘increment') 即类似于子组件跟父组件说了一声“hi,爸爸 我调用了我自己的increment函数”,通知父组件

步骤4:

回看一下在父组件里面定义的自定义标签,可以看到

v-on:increment="incrementTotal"

什么意思呢?我们还是用大白话来解释一下

就是说“孩子,当你调用了increment函数的时候,我将调用incrementTotal函数来回应你”

这时我们回想步骤3,在子组件我们已经使用emit来进行通知,所以,这样就形成父子组件间的相互呼应传递信息,其实在开发的过程中父子组件通讯也都是使用这样的方法,父组件传递信息给子组件的时候会通过props参数,通常不会直接在子组件中修改父组件传递下来的信息,而且通过这样的一个钩子去通知父组件对某些参数进行改变

步骤5:

这个就容易理解了,上一版本是本人在初学的时候写的所以思维很不严谨,抱歉,欢迎大家指导批评

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery-ui中自动完成实现方法
Jun 10 Javascript
IE本地存储userdata的一个bug说明
Jul 01 Javascript
鼠标经过显示二级菜单js特效
Aug 13 Javascript
常见的javascript跨域通信方法
Dec 31 Javascript
jquery ztree异步搜索(搜叶子)实践
Feb 25 Javascript
jQuery添加options点击事件并传值实例代码
May 18 Javascript
javascript运算符——逻辑运算符全面解析
Jun 27 Javascript
vue 粒子特效的示例代码
Sep 19 Javascript
vue translate peoject实现在线翻译功能【新手必看】
Jun 07 Javascript
js实现购物车功能
Jun 12 Javascript
vue:el-input输入时限制输入的类型操作
Aug 05 Javascript
Nuxt的路由配置和参数传递方式
Nov 06 Javascript
bootstrap响应式导航条模板使用详解(含下拉菜单,弹出框)
Nov 17 #Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
Nov 17 #Javascript
JS基于对象的特性实现去除数组中重复项功能详解
Nov 17 #Javascript
在 Node.js 中使用 async 函数的方法
Nov 17 #Javascript
JS实现的数组去除重复数据算法小结
Nov 17 #Javascript
bootstrap轮播模板使用方法详解
Nov 17 #Javascript
浅谈Node模块系统及其模式
Nov 17 #Javascript
You might like
PHP中的超全局变量
2006/10/09 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
学习php设计模式 php实现单例模式(singleton)
2015/12/07 PHP
JavaScript入门教程(1) 什么是JS
2009/01/31 Javascript
js带按钮的提示框可供选择示例代码
2013/09/17 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
2014/06/09 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
2015/07/05 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
2016/06/23 Javascript
JavaScript奇技淫巧44招【实用】
2016/12/11 Javascript
初识NodeJS服务端开发入门(Express+MySQL)
2017/04/07 NodeJs
xmlplus组件设计系列之列表(4)
2017/04/26 Javascript
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
JavaScript基础心法 数据类型
2018/03/05 Javascript
vue中mint-ui的使用方法
2018/04/04 Javascript
vue安装和使用scss及sass与scss的区别详解
2018/10/15 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
python使用心得之获得github代码库列表
2014/06/25 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
用Python画小女孩放风筝的示例
2019/11/23 Python
Python解析json代码实例解析
2019/11/25 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
2020/11/06 Python
CSS3动画之利用requestAnimationFrame触发重新播放功能
2019/09/11 HTML / CSS
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
太阳镜仓库,售价20美元或更少:Sunglass Warehouse
2016/09/28 全球购物
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
公共汽车、火车和飞机票的通用在线预订和销售平台:INFOBUS
2019/11/30 全球购物
车间班组长的职责
2013/12/13 职场文书
《美丽的丹顶鹤》教学反思
2014/04/22 职场文书
乡镇群众路线专项整治方案
2014/11/03 职场文书
新闻稿怎么写
2015/07/18 职场文书
《酸的和甜的》教学反思
2016/02/18 职场文书
公司转让协议书
2016/03/19 职场文书
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python