浅谈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 相关文章推荐
FireFox与IE 下js兼容触发click事件的代码
Nov 20 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
Feb 26 Javascript
浅谈javascript中字符串String与数组Array
Dec 31 Javascript
javascript中setInterval的用法
Jul 19 Javascript
jquery实现简单实用的打分程序实例
Jul 23 Javascript
jQuery实现移动端滑块拖动选择数字效果
Dec 24 Javascript
jquery实现具有嵌套功能的选项卡
Feb 12 Javascript
JS传值出现中文参数乱码的解决方法
Jun 30 Javascript
JS原型与原型链的深入理解
Feb 15 Javascript
Node.js + express基本用法教程
Mar 14 Javascript
layer ui 导入文件之前传入数据的实例
Sep 23 Javascript
原生js实现分页效果
Sep 23 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+Mysql+jQuery中国地图区域数据统计实例讲解
2015/10/10 PHP
PHP实现的蚂蚁爬杆路径算法代码
2015/12/03 PHP
浅析php设计模式之数据对象映射模式
2016/03/03 PHP
thinkPHP自定义类实现方法详解
2016/11/30 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
2017/04/05 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
2017/05/30 PHP
js清除input中type等于file的值域(示例代码)
2013/12/24 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
jquery密码强度校验
2015/12/02 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
2017/04/13 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
Vue $emit $refs子父组件间方法的调用实例
2018/09/12 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
AngularJs中$cookies简单用法分析
2019/05/30 Javascript
VUE安装使用教程详解
2019/06/03 Javascript
用webpack4开发小程序的实现方法
2019/06/04 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
[53:21]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-CDEC
2014/05/22 DOTA
[04:22]DOTA2上海特级锦标赛主赛事第四日TOP10
2016/03/06 DOTA
Python中使用第三方库xlutils来追加写入Excel文件示例
2015/04/05 Python
详解Python中contextlib上下文管理模块的用法
2016/06/28 Python
pyenv命令管理多个Python版本
2017/03/26 Python
Python中请不要再用re.compile了
2019/06/30 Python
python实现BP神经网络回归预测模型
2019/08/09 Python
Python 使用 docopt 解析json参数文件过程讲解
2019/08/13 Python
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
Linux如何为某个操作添加别名
2015/02/05 面试题
机关作风建设自查报告及整改措施
2014/10/21 职场文书
依法行政工作汇报材料
2014/10/28 职场文书
新郎父母婚礼答谢词
2015/09/29 职场文书
2016年秋季运动会通讯稿
2015/11/25 职场文书
创业计划书之物流运送
2019/09/17 职场文书