浅谈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 相关文章推荐
jquery 为a标签绑定click事件示例代码
Jun 23 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
Nov 12 Javascript
JavaScript让Textarea支持tab按键的方法
Jun 26 Javascript
jquery无限级联下拉菜单简单实例演示
Nov 23 Javascript
JS简单实现移动端日历功能示例
Dec 28 Javascript
Node.js中文件操作模块File System的详细介绍
Jan 05 Javascript
实现一个简单的vue无限加载指令方法
Jan 10 Javascript
js实现年月日表单三级联动
Apr 17 Javascript
Vue2.x中的Render函数详解
May 30 Javascript
node内置调试方法总结
Feb 22 Javascript
node.js微信小程序配置消息推送的实现
Feb 13 Javascript
Vue程序化的事件监听器(实例方案详解)
Jan 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
判“新”函数:得到今天与明天的秒数
2006/10/09 PHP
php strtotime 函数UNIX时间戳
2009/01/14 PHP
php URL编码解码函数代码
2009/03/10 PHP
php中过滤非法字符的具体实现
2013/10/29 PHP
PHP面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
zf框架的数据库追踪器使用示例
2014/03/13 PHP
纯PHP生成的一个树叶图片画图例子
2014/04/16 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
2015/05/12 PHP
浅谈PHP中其他类型转化为Bool类型
2016/03/28 PHP
php中使用GD库做验证码
2016/03/31 PHP
PHPCMS2008广告模板SQL注入漏洞修复
2016/10/11 PHP
实例化php类时传参的方法分析
2020/06/05 PHP
JavaScript 原型链学习总结
2010/10/29 Javascript
自用js开发框架小成 学习js的朋友可以看看
2010/11/16 Javascript
JS打开新窗口的2种方式
2013/04/18 Javascript
JQuery.get提交页面不跳转的解决方法
2015/01/13 Javascript
javascript 数组操作详解
2015/01/29 Javascript
js实现拉幕效果的广告代码
2015/09/02 Javascript
JavaScript tab选项卡插件实例代码
2016/02/23 Javascript
requireJS使用指南
2016/04/27 Javascript
javascript 利用arguments实现可变长参数
2016/11/21 Javascript
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
2017/06/15 Python
Python爬虫包BeautifulSoup异常处理(二)
2018/06/17 Python
numpy和pandas中数组的合并、拉直和重塑实例
2019/06/28 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
python cookie反爬处理的实现
2020/11/01 Python
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
可持续未来的时尚基础:Alternative Apparel
2019/05/06 全球购物
大二学习计划书范文
2014/04/27 职场文书
服装发布会策划方案
2014/05/22 职场文书
班级团队活动方案
2014/08/14 职场文书
商务英语专业大学生职业生涯规划书
2014/09/14 职场文书
2019银行竞聘书
2019/06/21 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers