Vue.js 组件中的v-on绑定自定义事件理解
2017-03-06 11:00
1076 查看
每个 Vue 实例都实现了事件接口(Events interface),即:
使用
使用
Vue的事件系统分离自浏览器的EventTarget API。尽管它们的运行类似,但是
另外,父组件可以在使用子组件的地方直接用 v-on 来监听子组件触发的事件。
下面是一个文档上面的例子:
2017年4月11日更新
跟着这个例子我来谈谈理解,更新以前我那种错误的思想
先画出理解的步骤,跟着步骤来进行理解
我们来看一下文档
vm.$emit( event, […args] ) : 触发当前实例上的事件。附加参数都会传给监听器回调
在这里是什么意思呢?按我自己的大白话就是这样说的:
通过这句函数可以让父组件知道子组件调用了什么函数,this.$emit(‘increment’) 即类似于子组件跟父组件说了一声“hi,爸爸 我调用了我自己的increment函数”,通知父组件
什么意思呢?我们还是用大白话来解释一下
就是说“孩子,当你调用了increment函数的时候,我将调用incrementTotal函数来回应你”
这时我们回想步骤3,在子组件我们已经使用emit来进行通知,所以,这样就形成父子组件间的相互呼应传递信息,其实在开发的过程中父子组件通讯也都是使用这样的方法,父组件传递信息给子组件的时候会通过props参数,通常不会直接在子组件中修改父组件传递下来的信息,而且通过这样的一个钩子去通知父组件对某些参数进行改变
使用
$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 } } })
跟着这个例子我来谈谈理解,更新以前我那种错误的思想
先画出理解的步骤,跟着步骤来进行理解
步骤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:
这个就容易理解了,上一版本是本人在初学的时候写的所以思维很不严谨,抱歉,欢迎大家指导批评相关文章推荐
- 浅谈Vue.js 组件中的v-on绑定自定义事件理解
- vue.js绑定事件监听器(v-on)
- 对Vue.js之事件的绑定(v-on: 或者 @ )详解
- Vue.js自定义事件的表单输入组件方法
- vue.js通过子组件通信和父子组件通信实现动态表单动态绑定事件(适合交互系统统一使用)
- vue.js绑定事件监听器示例【基于v-on事件绑定】
- Vue.js之事件的绑定(v-on: 或者 @ )
- Vue之v-on绑定监听子组件传来的事件
- Vue.js之事件的绑定(v-on: 或者 @ )
- Js bind\live\delegate\on 事件绑定方式
- 理解JS绑定事件
- Vue.js实现一个自定义分页组件vue-paginaiton
- js中事件绑定,$("body").on("click")与$("").click()区别
- js事件委托和jQuery事件绑定on , off , one , bind , unbind , die
- Vue结合原生js实现自定义组件自动生成示例
- js事件委托和jQuery事件绑定on , off , one , bind , unbind , die
- vue.js的事件处理器v-on:click
- 深入理解jquery新的绑定事件机制on方法的使用
- Vue结合原生js实现自定义组件自动生成
- 关于js动态生成元素,注册(绑定)的事件失效的解决(on)