在 Vue.js 中,修饰符(Modifiers)是通过点(.
)语法附加到指令(如 v-model
或 v-on
)上的特殊后缀,用于以声明式的方式改变指令的行为。它们主要分为表单修饰符(用于 v-model
)和事件修饰符(用于 v-on
)。
一、表单修饰符(用于 v-model
)
这些修饰符用于处理用户输入时的常见需求,简化数据处理逻辑。
.lazy
- 作用:将
v-model
的同步时机从默认的input
事件改为change
事件。 - 场景:当输入框失去焦点(blur)或用户按下回车时才更新数据,减少频繁更新。
- 作用:将
.number
- 作用:自动将用户的输入值转换为数字类型。
- 场景:当期望输入的是数字时,避免字符串类型。
- 注意:如果输入无法被
parseFloat()
解析,则返回原始字符串。
.trim
- 作用:自动过滤用户输入的首尾空白字符。
- 场景:处理用户名、邮箱等需要去除前后空格的输入。
二、事件修饰符(用于 v-on
或 @
)
这些修饰符用于处理 DOM 事件的细节,如阻止默认行为、阻止事件冒泡等。
.stop
- 作用:调用
event.stopPropagation()
,阻止事件冒泡。
- 作用:调用
.prevent
- 作用:调用
event.preventDefault()
,阻止事件的默认行为。
- 作用:调用
.capture
- 作用:使用事件捕获模式添加事件监听器(即事件从外层向内层触发)。
.self
- 作用:只有当事件是从绑定元素本身触发时才触发回调(即
event.target
是绑定元素本身)。 - 场景:防止事件从子元素冒泡上来触发。
- 作用:只有当事件是从绑定元素本身触发时才触发回调(即
.once
- 作用:事件只触发一次,之后移除监听器。
.passive
- 作用:以被动模式添加事件监听器。对于滚动等事件,可以提升滚动的流畅性。
- 注意:与
.prevent
冲突,同时使用时.passive
优先。
修饰符可以串联使用
修饰符可以连续使用,例如:
<!-- 阻止默认行为且只触发一次 -->
<a @click.prevent.once="doThis">链接</a>
<!-- 阻止冒泡且使用捕获模式 -->
<div @click.capture.stop="doThat">...</div>
总结
类型 | 修饰符 | 作用 |
---|---|---|
表单修饰符 | .lazy | input → change 事件同步 |
.number | 自动转为数字 | |
.trim | 自动去除首尾空格 | |
事件修饰符 | .stop | 阻止冒泡 |
.prevent | 阻止默认行为 | |
.capture | 使用捕获模式 | |
.self | 仅绑定元素本身触发 | |
.once | 只触发一次 | |
.passive | 被动监听,提升性能 |
这些修饰符让 Vue 的模板语法更加简洁和声明式,避免了在事件处理函数中手动调用 event.preventDefault()
或 event.stopPropagation()
,提升了开发效率。
THE END