同学们好,我是 Eugene(尤金),一名有多年前后台开发经验的前端工程师。
(Eugene 发音:/juːˈdʒiːn/,大家怎么顺口怎么叫就好)
你是否也有过:学过不少技术,到关键时刻说不清、写不出?
是否也曾怀疑自己,明明感觉会,却总是差一口气?
想系统梳理,又因为工作、家庭,时间总是不够。
技术行业逆水行舟,不进则退。
如果你也有类似困扰,不必焦虑。
从现在开始,跟着我一起心态归零,用碎片时间做一次彻底的前端基础扫盲。
我们一起慢慢来,扎扎实实变强。
不搞花里胡哨的理论堆砌,只分享看得懂、用得上的前端干货,
咱们一起稳步积累,真正摆脱“面向搜索引擎写代码”的尴尬。
一、v-on 是什么?
v-on 是 Vue 的事件绑定指令。在使用 Vxe Table 时,我注意到一种在公司项目里不多见的写法,这里分享给还不熟悉的同学。
// 此处复制的是 vxe-table 组件库的示例代码
<vxe-grid v-bind="gridOptions" v-on="gridEvents"></vxe-grid>
const gridEvents: VxeGridListeners = {
pageChange ({ pageSize, currentPage }) {
pagerVO.currentPage = currentPage
pagerVO.pageSize = pageSize
loadList()
}
}
很多人只知道 v-on 是 Vue 的事件绑定 API,常见写法是:
v-on:click="getInfo"- 或简写:
@click="handleClick"
而在上面的代码里,v-on 后面直接接了 ="gridEvents",这并不是错误写法,而是 v-on 的对象式事件绑定。它和常见的 @click="handleClick" 是同一套机制,只是写法不同。
二、两种写法对比
1. 单个事件(常规写法)
@ 是 v-on: 的语法糖,两种写法等价:
<button @click="handleClick">点击</button>
<!-- 等价于 -->
<button v-on:click="handleClick">点击</button>
2. 对象式绑定(v-on="对象" 用法)
用 v-on 直接绑定一个事件对象,适合需要绑定多个事件的场景:
<vxe-grid v-on="gridEvents"></vxe-grid>
其中 gridEvents 是一个键值对对象:
- 键:事件名(如
pageChange、cellClick) - 值:对应的处理函数
Vue 会遍历这个对象,把每个键值对解析成「v-on:事件名 = 处理函数」并完成绑定。
三、在代码中的实际含义
以 vxe-table 的分页事件为例,事件对象定义如下(包含 TypeScript 类型):
const gridEvents: VxeGridListeners = {
pageChange({ pageSize, currentPage }) {
pagerVO.currentPage = currentPage
pagerVO.pageSize = pageSize
loadList()
},
}
此时 v-on="gridEvents" 等价于:
<vxe-grid v-on:pageChange="gridEvents.pageChange"></vxe-grid>
如果 gridEvents 中有多个事件,Vue 会一次性完成绑定,例如:
// 包含多个事件的处理对象
const gridEvents = {
pageChange: (e) => { ... },
editClosed: (e) => { ... },
cellClick: (e) => { ... },
}
等价于:
<vxe-grid
v-on:pageChange="gridEvents.pageChange"
v-on:editClosed="gridEvents.editClosed"
v-on:cellClick="gridEvents.cellClick"
></vxe-grid>
四、为什么使用对象式事件绑定?
- 事件多时更简洁:不用在模板里写很多
v-on:xxx="xxx",一个v-on="对象"即可完成批量绑定。 - 便于维护:所有事件的处理函数集中在一个对象里,逻辑清晰,新增/修改/删除事件只需改对象,不用改模板。
- 适配组件库:vxe-table、Element Plus 等复杂组件(表格、树等)事件很多,用对象统一配置事件,结构更清晰。
学习本就是一场持久战,不需要急着一口吃成胖子。哪怕今天你只记住了一点点,这都是实打实的进步。
后续我还会继续用这种大白话、讲实战方式,带大家扫盲更多前端基础。
关注我,不迷路,咱们把那些曾经模糊的知识点,一个个彻底搞清楚。
如果你觉得这篇内容对你有帮助,不妨点赞+收藏,下次写代码卡壳时,拿出来翻一翻,比搜引擎更靠谱。
我是 Eugene,你的电子学友,我们下一篇干货见~