浅谈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 相关文章推荐
跨域传值即主页面与iframe之间互相传值
Dec 09 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
Dec 08 Javascript
理解javascript封装
Feb 23 Javascript
深入理解ECMAScript的几个关键语句
Jun 01 Javascript
JSONP跨域请求实例详解
Jul 04 Javascript
JS 在数组指定位置插入/删除数据的方法
Jan 12 Javascript
重新理解JavaScript的六种继承方式
Mar 24 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
Jun 30 Javascript
Angularjs中date过滤器失效的问题及解决方法
Jul 06 Javascript
js设置鼠标悬停改变背景色实现详解
Jun 26 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
Dec 10 Javascript
微信小程序实现多张图片上传功能
Nov 18 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程序之die调试法 快速解决错误
2009/09/17 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
ThinkPHP3.2.2的插件控制器功能简述
2014/07/09 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
ExtJS4 表格的嵌套 rowExpander应用
2014/05/02 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
2015/04/12 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
2015/09/14 Javascript
JavaScript模块规范之AMD规范和CMD规范
2015/10/27 Javascript
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
基于jQuery实现多标签页切换的效果(web前端开发)
2016/07/24 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
jquery tmpl模板(实例讲解)
2017/09/02 jQuery
swiper移动端轮播插件(触碰图片之后停止轮播)
2017/12/28 Javascript
详解vue项目打包后通过百度的BAE发布到网上的流程
2018/03/05 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
利用python获取Ping结果示例代码
2017/07/06 Python
python爬取各类文档方法归类汇总
2018/03/22 Python
Python numpy 点数组去重的实例
2018/04/18 Python
python批量查询、汉字去重处理CSV文件
2018/05/31 Python
python中pip的安装与使用教程
2018/08/10 Python
python logging.info在终端没输出的解决
2020/05/12 Python
英国知名化妆品网站:Revolution Beauty(原TAM Beauty)
2018/02/28 全球购物
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
shell的种类有哪些
2015/04/15 面试题
法学毕业生自我鉴定
2013/11/08 职场文书
简历中自我评价怎么写
2014/02/12 职场文书
资金主管岗位职责范本
2014/03/04 职场文书
2014年母亲节演讲稿范文
2014/05/07 职场文书
公司董事长岗位职责
2014/06/08 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers