Vue 中的修饰符(Modifiers)是一种特殊的后缀,用于指示一个指令应该以特殊方式绑定。它们主要用于v-model
、v-on
(或简写为@
)等指令上,以提供更灵活的事件处理或数据绑定选项。修饰符以点.
表示。
常见的修饰符包括:
.prevent
:用于v-on
或@
上,阻止事件的默认行为。.stop
:用于v-on
或@
上,阻止事件冒泡。.capture
:用于v-on
或@
上,添加事件监听器时使用事件捕获模式。.self
:用于v-on
或@
上,只当事件在该元素本身(而不是子元素)触发时触发回调。.once
:用于v-on
或@
上,事件只触发一次。.passive
:用于v-on
或@
上,提高移动端滚动性能,告诉浏览器监听器永远不会调用preventDefault()
。
在v-model
上的修饰符:
.lazy
:在默认情况下,v-model
在input
事件中同步输入框的值与数据,但使用.lazy
修饰符后,改为在change
事件中同步。.number
:自动将用户的输入值转为数值类型,如果转换结果为NaN
则返回字符串原值。.trim
:自动过滤用户输入的首尾空白字符。
使用示例
v-on 修饰符示例
<template>
<div>
<!-- 阻止表单提交时的页面跳转 -->
<form @submit.prevent="onSubmit">
<!-- ... -->
</form>
<!-- 阻止点击事件冒泡 -->
<button @click.stop="doThis">点击我</button>
<!-- 只有当点击事件在该元素本身触发时,才会触发回调 -->
<a @click.self="doSomething">点击我,但不要在子元素上点击</a>
</div>
</template>
<script>
export default {
methods: {
onSubmit() {
// 处理表单提交
},
doThis() {
// 执行某些操作
},
doSomething() {
// 执行某些操作
}
}
}
</script>
v-model 修饰符示例
<template>
<div>
<!-- 使用.lazy修饰符,在change事件中更新数据 -->
<input v-model.lazy="message" placeholder="edit me">
<!-- 使用.number修饰符,自动将输入转换为数字 -->
<input v-model.number="age" type="number" placeholder="age">
<!-- 使用.trim修饰符,自动过滤首尾空格 -->
<input v-model.trim="trimmedMessage" placeholder="edit me">
</div>
</template>
<script>
export default {
data() {
return {
message: '',
age: null,
trimmedMessage: ''
}
}
}
</script>
这些修饰符极大地增强了Vue的灵活性和可用性,特别是在处理DOM事件和表单输入时。