博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、事情的起因

表格里有勾选框,还有操作按钮,如下图

image.png

等功能开发完后,需求临时说要加一个行点击也能选中的功能,

心想,加就加呗,直接一个梭哈,在el-table表格里加上

@row-click="handleRowClick", 然后就提交了

功能倒是能用,就是点击按钮的时候也触发了,果不其然被测试打回重写(狗头)

二、事情的经过

一开始,我想着通过row-click的参数来做区分,因为row-click的默认参数有row, column, event这三个,其中column就可以拿到点击时候,鼠标所在的列(column.property就是这一列绑定的数值项,用其他也可以),根据这个,倒是修复了点击按钮,也会触发row-click函数的bug。

但还是差点意思,因为上述方法,会将操作按钮那一整列都划分为不触发row-click函数的区域,如果鼠标在这区域里,但不在按钮上,就触发不了任何函数,用户体验感还是有点差强人意。

于是乎,我把目光放到了修饰符上,因为这种重复触发,无非就是冒泡了,如果能阻止事件的冒泡,那应该也可以达到目的。

用.stop修饰符就可以实现效果了。

所以就有了第三步

三、修饰符

1、事件修饰符

.native修饰符

在组件标签上使用的时候,就要加上native修饰符,这样就可以像原生标签一样使用了。
原生标签,则不允许添加该修饰符。element组件也可以用。
 
.stop修饰符

阻止事件继续传播,也就是阻止冒泡了。

.prevent修饰符

阻止标签的默认行为,比如a标签的自动跳转,form标签中的submit按钮(如果form没
有submit事件,那第一个不是type为button的按钮,也会触发这个自动刷新),自动
刷新网页,网页右键单机,弹出的默认菜单。

.capture修饰符

使用事件捕获模式,即元素自身触发的事件先在此处处理,然后才交由内部元素进行处理。
简单的讲,就是加了.capture修饰符的,会先优先处理这个标签的事件,不管它里面是否还
包含了其他标签。

.once修饰符

事件只触发一次。

.self修饰符

只有在`点击事件绑定的元素`与`当前被点击元素`一致时才触发点击事件。

.passive修饰符

告诉浏览器不阻止事件的默认行为,尽早告诉,可有效提供移动端性能。




使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。
举个例子:
用v-on:click.prevent.self会阻止所有的点击,
而 v-on:click.self.prevent 只会阻止对元素自身的点击。
复制代码

2、v-model的修饰符

 .lazy修饰符
 
 常用在input框,使用后,只有当input框失去焦点or用户回车了,才会修改同步数据,
 应用场景,避免每次输入都会和后台数据绑定的情况。
 
 .number修饰符
 
 当用户在input中输入数字时,浏览器会默认将输入的数字转化为string类型,使用
 number修饰符来将输入的数字转为number类型。
 
 .trim修饰符
 
 用户可能输入的字符串中含有空格,这样系统在处理时可能会出现错误。使用trim
 修饰符来去掉字符串首部或者尾部的所有空格。
 
 
复制代码

3、键盘事件修饰符

@keyup.enter   可以捕获回车键事件
.tab  制表符事件
.delete (捕获“删除”和“退格”键)
.esc  esc事件
.space  空格事件
.up   上下左右事件
.down
.left
.right


特殊的修饰键

.ctrl
.alt
.shift
.meta

<!-- 按下Alt + 释放C触发 -->
<input @keyup.alt.67="clear">

<!-- 按下Alt + 释放任意键触发 -->
<input @keyup.alt="other">

<!-- 按下Ctrl + enter时触发,“在十进制下,回车键ASCII码为“13” -->
<input @keydown.ctrl.13="submit">
复制代码

Snipaste_2022-07-19_15-30-26.jpg

ps:又可以水一篇


作者:地霊殿__三無
链接:https://juejin.cn/post/7124650150261161992
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Live2D