通常来讲,vue自己提供了v-on:eventName这个语法来提供vue的时事件绑定,一般使用@eventName这个语法糖代替上述语法。javascript
使用过程当中没有考虑@eventName做用标签的类型,由于通常将该语法用在html原生标签,在组件标签上使用的时候,出现了@click="handler"没法触发handler事件。html
如下为事故现场:vue
<my-component @click="handler"><my-component/>
使用该组件的vue实例 注:handler( )为ES6语法,等同于handler:function( )java
methods:{ handler(){ console.log('click me'); } }
通过面向搜索编程(百度) 发现默认@eventName使用在组件上是表示绑定了组件自定义eventName 要绑定原生DOM事件,须要使用.native来修饰@eventName,即 @eventName.native 语法编程
那么自定义事件又是怎么一肥事呢?函数
通常来讲,自定义事件用于Vue自定义组件,用于内部DOM元素事件响应时,开放给组件外部的API。this
specially,他须要组件内部使用$emit('defineEventName',value)这个方法来触发,这也代表了一开始个人错误想法,觉得是触发组件内部的原生DOM的click方法,这里指明了使用@evnetName做用在组件上,不会触发原生DOM事件,即一开始的无反应。spa
这里完成了一个@click="handler",而不是用native修饰符的例子,基于Vue自定义事件code
my-component组件内部实现component
<template> <button @click="in">click me</button> </template>
methods:{ in(){ this.$emit('click') } }
这个例子在点击按钮click me以后可以经过$emit('click')触发组件自定义的click事件以调用使用该组件上的Vue实例上的handler方法,打印出click me。
<font color="#ff0000">在组件上想要触发@click事件,组件内部须要有一个能够触发原生click事件的元素,而且这个原生click事件绑定一个用于提交emit('click')到组件上的@click函数</font>