浅谈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 相关文章推荐
JavaScript中的Document文档对象
Jan 16 Javascript
『jQuery』.html(),.text()和.val()的概述及使用
Apr 22 Javascript
JavaScript实现通过select标签跳转网页的方法
Sep 29 Javascript
浅析jQuery操作select控件的取值和设值
Dec 07 Javascript
Bootstrap表单使用方法详解
Feb 17 Javascript
JS实现的简单拖拽功能示例
Mar 13 Javascript
详解angularJS动态生成的页面中ng-click无效解决办法
Jun 19 Javascript
Node.js 的模块知识汇总
Aug 16 Javascript
JS实现简单获取最近7天和最近3天日期的方法
Apr 18 Javascript
react.js组件实现拖拽复制和可排序的示例代码
Aug 20 Javascript
JavaScript深入V8引擎以及编写优化代码的5个技巧
Jun 24 Javascript
Vue学习笔记之计算属性与侦听器用法
Dec 07 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
discuz的php防止sql注入函数
2011/01/17 PHP
PHP实现ftp上传文件示例
2014/08/21 PHP
利用php输出不同的心形图案
2016/04/22 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
javascript 出生日期和身份证判断大全
2008/11/13 Javascript
javascript 表单验证常见正则
2009/09/28 Javascript
我遇到的参数传递中 双引号单引号嵌套问题
2010/02/11 Javascript
javascript 数据存储的常用函数总结
2017/06/01 Javascript
JS设计模式之单例模式(一)
2017/09/29 Javascript
详解如何探测小程序返回到webview页面
2019/05/14 Javascript
JavaScript实现美化滑块效果
2019/05/17 Javascript
vue指令做滚动加载和监听等
2019/05/26 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
在类Unix系统上开始Python3编程入门
2015/08/20 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
Python Web版语音合成实例详解
2019/07/16 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
flask框架json数据的拿取和返回操作示例
2019/11/28 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
使用Python爬取弹出窗口信息的实例
2020/03/14 Python
使用Nibabel库对nii格式图像的读写操作
2020/07/01 Python
HTML5使用Audio标签实现歌词同步的效果
2016/03/17 HTML / CSS
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
优秀的教师个人的中文求职信
2013/09/21 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
校本研修个人总结
2015/02/28 职场文书
面试通知单大全
2015/04/20 职场文书
2015年施工员工作总结范文
2015/04/20 职场文书
2016参观监狱警示教育活动心得体会
2016/01/15 职场文书
2019年干货:自我鉴定
2019/03/25 职场文书
Python opencv缺陷检测的实现及问题解决
2021/04/24 Python
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript