el-input无法绑定键盘事件?浅析.native修饰符的作用与原理(绊脚石系列)

在开始说明为什么el-input无法绑定键盘事件之前,我们需要一点铺垫

native介绍

我们在使用vue进行开发时,会有很多不同的组件,它们作为一个个标签填充在template模板中,你是否想过,这些组件既然是标签,那么它们能否监听html标签的各种事件呢?

结果是不能,原因在于这些组件虽然看上去和html标签一样,用法也和html标签一样,但实际上,它们只是子组件中真实html标签的一个载体而已,并不存在于真实dom中,既然不存在于真实dom中,那么当然也不能监听html标签的原生事件啦。

针对这种情况,Vue给我们提供了一个事件修饰符:.native ,它允许我们在自定义的组件标签中添加原生的DOM事件。

el-input为什么无法绑定键盘事件?

如果你认真看完了上面的铺垫知识,其实答案已经出来了:标签其本质上是一个组件。

想想看,我们在刚刚学习html标签的时候,什么时候学过这种不守浏览器道的奇怪标签?很明显,实际上就是一个组件,它被解析成html结构是这样的:

我们给添加@keydown事件时,keydown只能被解析为自定义事件,我们需要通过$emit手动触发该事件的回调函数才行。

而.native修饰符,就是为了这种情况而出现的,当我们使用了此修饰符后,vue会帮我们给组件的根标签添加一个事件监听器,我们便可以正常使用该事件了。

所以解决方法就是:绑定@keydown事件时,添加.native修饰符即可。

同理,其他的element组件也是可以用这个方法来绑定原生DOM事件的。也许你还有疑问:那为什么的@click事件就不用.native 修饰符呢?

答案也很简单,因为人家在创建组件时就为里面的

你可能感兴趣的:(前端路上的绊脚石,vue.js,前端)