diff --git a/packages/runtime-core/src/componentEmits.ts b/packages/runtime-core/src/componentEmits.ts index db52bc88c33..555dec28c2f 100644 --- a/packages/runtime-core/src/componentEmits.ts +++ b/packages/runtime-core/src/componentEmits.ts @@ -151,10 +151,18 @@ export function emit( } let args = rawArgs - const isModelListener = event.startsWith('update:') + let isModelListener + let modifiers + if ( + __COMPAT__ && + (isModelListener = compatModelEventPrefix + event in props) + ) { + modifiers = props.modelModifiers + } else if ((isModelListener = event.startsWith('update:'))) { + modifiers = 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: ` +