diff --git a/packages/runtime-core/src/componentEmits.ts b/packages/runtime-core/src/componentEmits.ts index db52bc88c33..c03bead3a92 100644 --- a/packages/runtime-core/src/componentEmits.ts +++ b/packages/runtime-core/src/componentEmits.ts @@ -151,10 +151,14 @@ export function emit( } let args = rawArgs - const isModelListener = event.startsWith('update:') + const isCompatModelListener = + __COMPAT__ && compatModelEventPrefix + event in props + const isModelListener = isCompatModelListener || event.startsWith('update:') + const modifiers = isCompatModelListener + ? props.modelModifiers + : isModelListener && getModelModifiers(props, event.slice(7)) // for v-model update:xxx events, apply modifiers on args - const modifiers = isModelListener && getModelModifiers(props, event.slice(7)) if (modifiers) { if (modifiers.trim) { args = rawArgs.map(a => (isString(a) ? a.trim() : a)) diff --git a/packages/vue-compat/__tests__/componentVModel.spec.ts b/packages/vue-compat/__tests__/componentVModel.spec.ts index 7e498828715..5ef19954734 100644 --- a/packages/vue-compat/__tests__/componentVModel.spec.ts +++ b/packages/vue-compat/__tests__/componentVModel.spec.ts @@ -82,4 +82,62 @@ describe('COMPONENT_V_MODEL', () => { template: ``, }) }) + + async function runTestWithModifier(CustomInput: ComponentOptions) { + const vm = new Vue({ + data() { + return { + text: ' foo ', + } + }, + components: { + CustomInput, + }, + template: ` +