尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Element UI 组件绑定 click 事件不触发怎么排查?.native 修饰符怎么用

Element UI 组件绑定 click 事件不触发怎么排查?.native 修饰符怎么用 Element UI 组件绑定 click 事件不触发怎么排查.native 修饰符怎么用【免费下载链接】elementA Vue.js 2.0 UI Toolkit for Web项目地址: https://gitcode.com/gh_mirrors/eleme/element在使用 Element UI基于 Vue.js 2.0 的 UI 组件库时一个常见的问题是在el-xxx组件标签上直接绑定click等事件点击后回调函数却不执行。Element UI 的 FAQ 对这一现象有明确解释并给出了对应的写法。本文按 FAQ 和组件文档中的实际示例说明如何定位这个问题以及.native修饰符的用法。事件不触发时的第一个检查点是否使用了 .native 修饰符FAQ 中「给组件绑定的事件为什么无法触发」一节的结论是在 Vue 2.0 中为自定义组件绑定原生事件必须使用.native修饰符。也就是说el-form、el-input、el-table这类组件对 Vue 来说都是自定义组件click、keyup.enter等原生 DOM 事件监听器必须写成my-component click.nativehandleClickClick Me/my-component如果你的代码是在 Element UI 组件上直接写clickhandleClick没有.native且组件本身没有声明对应的组件事件那么回调不会触发。排查时的判断顺序是确认组件是不是 Element UI 组件el-前缀还是自己封装的组件如果是把原生事件监听器改为xxx.native的写法再验证点击是否触发触发后仍无效果时再检查监听器绑定的元素本身例如按钮是否处于disabled或loading状态。例外el-button 的 click 是组件事件不用 .nativeFAQ 同时说明了一个例外从易用性的角度出发我们对Button组件进行了处理使它可以监听click事件。el-button clickhandleButtonClickClick Me/el-button这一点在组件源码中可以对照button.vue 内部在原生按钮的clickhandleClick中执行this.$emit(click, evt)把原生点击转成了click组件事件向外发出所以el-button上的click不带.native也能触发。FAQ 的原文是「但是对于其他组件还是需要添加.native修饰符」——除Button这类经过处理的组件外其余 Element UI 组件上的原生事件仍要加.native。因此「事件不触发」不一定是写法错误在el-button上漏写.native反而不会出问题在其他组件上漏写才会失效。文档中的三个 .native 实际用法以下示例都直接取自本仓库的组件文档分别对应点击、按键和表单提交三种场景。1. Table 行内按钮click.native.preventtable.md 中「在每一行添加操作该行数据的按钮」示例用 scoped slot 渲染按钮并监听点击el-table-column label操作 width120 template slot-scopescope el-button click.native.preventdeleteRow(scope.$index, tableData) typetext sizesmall 移除 /el-button /template /el-table-column注意这里写的是click.native.prevent.native保证监听的是原生点击事件.prevent用于阻止默认行为。参数scope.row/scope.$index即为对应行的数据与索引。2. Input 按键事件keyup.enter.nativetag.md 的「动态编辑标签」示例中在el-input上监听回车el-input classinput-new-tag v-ifinputVisible v-modelinputValue refsaveTagInput sizesmall keyup.enter.nativehandleInputConfirm blurhandleInputConfirm /el-inputkeyup.enter是原生键盘事件在el-input上必须写成keyup.enter.native才能生效。3. Form 提交submit.native.preventform.md 提到按 W3C 规定表单中只有一个输入框时在该输入框按回车会提交表单。文档给出的做法是在el-form标签上添加submit.native.prevent来阻止这一默认提交行为。这是「在 Element UI 组件上监听原生事件必须带.native」这一规则在表单场景的体现。验证方式与边界验证方式是直接对照 FAQ 的规则把组件上的原生事件监听器改成xxx.native写法后触发对应交互点击、回车、提交确认绑定的回调执行FAQ 中给出的my-component click.nativehandleClick即为标准写法示例。适用范围本结论针对 Vue 2.0 下的自定义组件Element UI 各el-组件均属此类。el-button的click是组件主动$emit出的组件事件属于 FAQ 说明的例外情况。FAQ 没有按组件逐一列出哪些组件事件可用.native覆盖具体到某个组件的某个事件先按上述「改写成.native后再验证」的流程处理并以组件文档中的示例如上文 Table、Tag、Form 三处为准。相关原文可参阅 FAQ、Button 组件文档、Table 组件文档 与 Form 组件文档。【免费下载链接】elementA Vue.js 2.0 UI Toolkit for Web项目地址: https://gitcode.com/gh_mirrors/eleme/element创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表