宝哥软件园

详解关于元素el按钮使用$attrs的一个注意要点

编辑:宝哥软件园 来源:互联网 时间:2021-08-28

之前需要对埃尔按钮做二次封装,所以就用到某视频剪辑软件的$attrs和$listeners属性,这两个属性在这不细说,可以在这里查看详情。

二次封装代码(限制按钮)

模板El-button v-show=' validButton ' v-bind=' $ attrs ' v-on=' $ listeners ' slot/slot/El-button/template script从' vuex '导入{ mapgeters };从" @/config/env "导入env导出默认值{ prop : }//按钮唯一标识buttonId: { type: String,required: true,},},computed : }.mapgetter([' getUserBtns ']),validButton:函数(){返回env.debug?真:这个。getuserbtns[this。button id];}, },};/script这样封装的好处就是不需要将上层每个属性都写一次支柱定义,对听众也不需要做一层中转发射。

发现问题

在某个页面,点击经过封装的极限按钮会使页面进行刷新

起初以为是点击事件的冒泡产生的,就把上层引用的@点击去掉:

限制按钮类型='警告'大小='小'按钮Id='2345434fg '点击/限位按钮发现还是一样会产生刷新的事件。

思考可能是$listeners的问题,在安装好的中打印也只有@点击事件,就算去掉$listeners也不管用。后来在浏览器对数字正射影像图结构的查看,发现极限按钮编译后变成:

可以看到编译后的类型变成了警告,查元素的源码可发现

button class=' El-button ' @ click=' handleClick ' : disabled=' button disabled | | loading ' : autofocus=' autofocus ' : type=' native type '.I class=' El-icon-loading ' v-if=' loading '/I I : class=' icon ' v-if=' icon!正在加载/I span v-if=' $ slots。“默认”插槽/插槽/跨度/按钮可发现是$attrs覆盖了埃尔按钮的nativeType

问题简化重现

El-form ref=' form ' : model=' form '标签-宽度=' 80px ' El-form-item按钮类型='primary '点击会刷新/button button type=' button ' @单击='在提交时'点击不会刷新/button /el-form-item/el-form重现链接

解决方法

将类型分出来道具,然后再通过支柱引用

模板El-button : type=' type ' v-show=' validButton ' v-bind=' $ attrs ' v-on=' $ listeners ' slot/slot/El-button/template script从' vuex '导入{ mapgeters };从" @/config/env "导入env导出默认值{ prop : }//按钮唯一标识buttonId: { type: String,required: true,},type: { type: String,},computed : }.mapgetter([' getUserBtns ']),validButton:函数(){返回env.debug?真:这个。getuserbtns[this。button id];}, },};/script以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

更多资讯
游戏推荐
更多+