浅谈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 相关文章推荐
web前端开发也需要日志
Dec 09 Javascript
node.js中的http.response.removeHeader方法使用说明
Dec 14 Javascript
常用javascript表单验证汇总
Jul 20 Javascript
理解javascript定时器中的单线程
Feb 23 Javascript
限制复选框最多选择项的实现代码
May 30 Javascript
微信小程序 支付功能开发错误总结
Feb 21 Javascript
关于Vue Webpack2单元测试示例详解
Aug 14 Javascript
vue cli构建的项目中请求代理与项目打包问题
Feb 26 Javascript
vue生命周期和react生命周期对比【推荐】
Sep 19 Javascript
基于vue-upload-component封装一个图片上传组件的示例
Oct 16 Javascript
vue h5移动端禁止缩放代码
Oct 28 Javascript
Vue基础配置讲解
Nov 29 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
基于mysql的bbs设计(二)
2006/10/09 PHP
PHP 模拟登陆MSN并获得用户信息
2009/05/16 PHP
php获取错误信息的方法
2015/07/17 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
JavaScript接口实现代码 (Interfaces In JavaScript)
2010/06/11 Javascript
js中eval详解
2012/03/30 Javascript
js 调用父窗口的具体实现代码
2013/07/15 Javascript
动态加载js、css等文件跨iframe实现
2014/02/24 Javascript
Android中的jQuery:AQuery简介
2014/05/06 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
2014/06/06 Javascript
JavaScript获取一个范围内日期的方法
2015/04/24 Javascript
jquery实现图片预加载
2015/12/25 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
常用原生js自定义函数总结
2016/11/20 Javascript
PHP实现记录代码运行时间封装类实例教程
2017/05/08 Javascript
微信小程序 密码输入(源码下载)
2017/06/27 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
2019/08/28 Javascript
如何手写简易的 Vue Router
2020/10/10 Javascript
[58:12]Ti4第二日主赛事败者组 LGD vs iG 3
2014/07/21 DOTA
详解Python的单元测试
2015/04/28 Python
在centos7中分布式部署pyspider
2017/05/03 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
2019/08/19 Python
python SocketServer源码深入解读
2019/09/17 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
python实现俄罗斯方块小游戏
2020/04/24 Python
python实现图片转字符画
2021/02/19 Python
HTML 5.1来了 9月份正式发布 更新内容预览
2016/04/26 HTML / CSS
新西兰最大的在线设计师眼镜店:SmartBuyGlasses新西兰
2017/10/20 全球购物
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
普通PHP程序员笔试题
2016/01/01 面试题
三好学生个人先进事迹材料
2014/05/17 职场文书
员工工作失职检讨书范文!
2019/07/03 职场文书
利用Python多线程实现图片下载器
2022/03/25 Python