当前位置: 首页 > news >正文

做网站的目的第十八届杭州动漫展

做网站的目的,第十八届杭州动漫展,自己怎么做视频网站,单位怎样做网站一、问题描述 今天看到一个问题&#xff0c;在用Vue2element-ui 2.15.8开发时&#xff0c;使用input组件绑定keydown事件没有任何效果。 <template><div id"app"><el-input v-model"content" placeholder"请输入" keydown&quo…

一、问题描述

今天看到一个问题,在用Vue2+element-ui 2.15.8开发时,使用input组件绑定keydown事件没有任何效果。

<template><div id="app"><el-input v-model="content" placeholder="请输入"  @keydown="handelKeydown"/></div>
</template><script>
export default {data() {return {content: ''}},methods: {handelKeydown() {console.log('触发了Keydown事件!!!') // 实际不会触发}}
}
</script>

二、问题排查

我们直接调试代码,找到Vue2中事件初始化的地方initEvents

在这里插入图片描述
在这里插入图片描述

可以看到,我们的keydown事件其实是有记录到的,那么事件绑定的关键就在updateComponentListeners

在这里插入图片描述

在这里有两句代码很关键:

target$1 = vm;target$1 这个变量后面会提到,它就是vm,我们<el-input>组件的实例对象。
updateListenersupdateComponentListeners实际内部调用的事件更新处理,它里面如何执行,我们往下看:

在这里插入图片描述

可以看到,updateListeners里实现事件绑定的逻辑是在add函数内:

在这里插入图片描述
在这里我们再次看到了 target$1变量,从而keydown事件其实就是绑定在它上面了。

那么如果要使得keydown事件能够正常触发,<el-input>组件内部在<input>上应该要有@keydown,并$emit('keydown')。于是,到<el-input>组件源码内看看到底有没有这个:

在这里插入图片描述
可以看到<el-input>组件并没有绑定keydown事件。

接下来,修改一下它的源码来验证一下:

在这里插入图片描述
在这里插入图片描述

这时候不要直接去调试,如果直接修改源码后调试会发现没有任何效果,即使你重新启动服务。原因在于,加载的Element-UI目标文件并不是源码文件:

在这里插入图片描述

也就是,在main.js中使用的import Element from 'element-ui'导入的其实是node_modules\element-ui\lib\element-ui.common.js

所以这里我们还要再修改一下main.js

import Element from 'element-ui'替换成下面的代码:

import Element from 'element-ui/src/index'

最后我们yarn serve重启一下服务,来验证一下:

在这里插入图片描述

三、解决方案

在实际开发中,不用去修改element-ui的源码也能使keydown事件生效,这里需要用到Vue的事件修饰符:navtive

修改一下代码:

<el-input v-model="content" placeholder="请输入"  @keydown.native="handelKeydown"/>

在这里插入图片描述

同样可以看到它生效了。

这里你可能有疑问,native为何能使keydown生效了呢?我们简单看一下:

在这里插入图片描述
在这里插入图片描述

可以看到:

给普通vnode创建完dom后、和createChilren后,会调用invokeCreateHooks函数,这里面会执行属性、事件、指令等的create钩子函数(注意不是组件实例的create钩子函数)。

在事件的create钩子函数中,会调用updateDomLIsteners方法的updateListeners方法,因为是创建阶段,所以又会调用add方法,使用target.addEventListeners给目标真实dom元素添加监听事件。

另:

在最后调试的过程中,在invokeCreateHooks函数内,你可能会好奇:cbs.create[i_2]指向updateDOMListeners,这个是怎么来的呢?

在这里插入图片描述

关于这个其实来自于下面的代码:

在这里插入图片描述
在这里插入图片描述

http://www.yayakq.cn/news/422647/

相关文章:

  • 网站建设毕业设计任务书全球知名设计公司
  • 网站后台 刷新安阳包装设计
  • 帮企业做网站前景怎么样网站访问统计 曲线图
  • 企业网站的基本功能wordpress 焦点图插件
  • 怎么把网站变成免费的手机端网站设计
  • 泌阳专业网站建设哔哩哔哩网页版怎么缓存
  • 百度网址链接安徽网站优化好不好
  • 做一个购物网站价格电商设计师网站
  • 济南网站制做下载app 的网站 如何做
  • 做网站一定要有公司吗网页设计与制作教程
  • 可以做推送的网站龙岗坪地网站建设公司
  • 彩虹网站建设襄阳营销网站建设
  • 电子商务网站建设网站电子版php网站安装图解
  • 中国flash网站模板中心威海外贸网站建设多少钱
  • 公司网站怎么弄wordpress历史版本
  • 云南建设厅网站首页小视频网站建设
  • phpcms 恢复网站赚钱宝部署wordpress
  • 友汇网网站建设前端seo优化
  • 一个品牌的策划方案龙岩seo公司
  • 安阳网站建设官网网站页面设计基础教程
  • 做电玩城设计的网站竞价推广开户公司
  • 第一环保网站建设项目环评公示记事本做网站怎么改字体
  • 装修网站推广方案淘宝网网站设计分析
  • 网站防采集 如何采集学做衣服网 缤纷网站
  • 零用贷网站如何做黄页网站建设
  • 网站题目有哪些应用市场下载安装
  • 做网站怎样才能接单杭州vi设计广告公司
  • 国外视频模板网站e怎么制作网站外链
  • 毕业作品是做网站的答辩会问什么安庆市建设工程造价信息网
  • 帮你做海报网站网络推广网站程序