v-model自定义修饰符需手动处理,其名称和值通过$attrs.modelmodifiers获取,如{uppercase: true}或{debounce: 300},并在事件回调中对值做trim、number、uppercase、debounce等显式转换。

v-model 的自定义修饰符不是 Vue 自动执行的魔法,而是你手动读取、判断并处理的逻辑分支。关键在于:修饰符名称会作为键出现在 $attrs.modelModifiers 对象中,值为 true(无参数)或具体值(如 v-model.debounce="300" → { debounce: 300 }),所有转换、节流、格式化等行为都需你显式实现。
获取并判断修饰符存在
在组合式 API 中,通过 $attrs.modelModifiers 访问修饰符对象。它不会自动注入 props,也不需要提前声明,直接解构或条件判断即可:
-
if ($attrs.modelModifiers?.uppercase)→ 判断是否用了.uppercase -
const delay = $attrs.modelModifiers?.debounce || 0→ 获取带参数的修饰符值 - 修饰符名区分大小写,
.Uppercase和.uppercase是两个不同键
在事件处理中应用修饰符逻辑
通常在输入事件(如 @input 或 @change)的回调里对原始值做预处理,再触发 update:modelValue:

