浅谈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 相关文章推荐
汉化英文版的Dreamweaver CS5并自动提示jquery
Nov 25 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
Jun 25 Javascript
jQuery截取指定长度字符串的实现原理及代码
Jul 01 Javascript
js实现网页标题栏闪烁提示效果实例分析
Nov 20 Javascript
JS实现网页表格自动变大缩小的方法
Mar 09 Javascript
Node.js返回JSONP详解
May 18 Javascript
js获取隐藏元素宽高的实现方法
May 19 Javascript
jquery pagination分页插件使用详解(后台struts2)
Jan 22 Javascript
JS实现碰撞检测的方法分析
Jan 19 Javascript
vue如何获取自定义元素属性参数值的方法
May 14 Javascript
p5.js临摹动态图形的方法
Oct 23 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
Feb 11 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 Socket 编程
2010/04/09 PHP
一些php技巧与注意事项分析
2011/02/03 PHP
php使用str_replace替换多维数组的实现方法分析
2017/06/15 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
推荐dojo学习笔记
2007/03/24 Javascript
jquery 插件 人性化的消息显示
2008/01/21 Javascript
为javascript添加String.Format方法
2020/08/11 Javascript
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
Vue.js 中的 $watch使用方法
2017/05/25 Javascript
element UI upload组件上传附件格式限制方法
2018/09/04 Javascript
js 判断当前时间是否处于某个一个时间段内
2019/09/19 Javascript
微信小程序 导入图标实现过程详解
2019/10/11 Javascript
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
跟老齐学Python之玩转字符串(1)
2014/09/14 Python
Python反射的用法实例分析
2018/02/11 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
2018/09/27 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
详解python中index()、find()方法
2019/08/29 Python
Python简单实现词云图代码及步骤解析
2020/06/04 Python
python和php哪个更适合写爬虫
2020/06/22 Python
python多线程semaphore实现线程数控制的示例
2020/08/10 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
利用CSS3把图片变成灰色模式的实例代码
2016/09/06 HTML / CSS
心得体会范文
2014/01/04 职场文书
生产厂长岗位职责
2014/02/21 职场文书
房屋租赁协议书
2014/04/10 职场文书
创业女性典型材料
2014/05/02 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
预备党员转正考核材料
2014/06/03 职场文书
捐款活动总结
2014/08/27 职场文书
承诺书模板
2014/08/30 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
活动主持人开场白
2015/05/28 职场文书
MIME类型中application/xml与text/xml的区别介绍
2022/01/18 HTML / CSS
Java数据结构之堆(优先队列)
2022/05/20 Java/Android