From: shadowings-zy Date: Wed, 26 Oct 2022 09:47:05 +0000 (+0800) Subject: fix(v-model): fix trim modifier on events with non-string args ( (#5770) X-Git-Tag: v3.2.42~45 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=018b8503994c2dae3c42dd03ea50d062956be970;p=thirdparty%2Fvuejs%2Fcore.git fix(v-model): fix trim modifier on events with non-string args ( (#5770) fix #5765 --- diff --git a/packages/runtime-core/__tests__/componentEmits.spec.ts b/packages/runtime-core/__tests__/componentEmits.spec.ts index f22be2de0c..0c196c763e 100644 --- a/packages/runtime-core/__tests__/componentEmits.spec.ts +++ b/packages/runtime-core/__tests__/componentEmits.spec.ts @@ -385,6 +385,28 @@ describe('component: emit', () => { expect(fn2).toHaveBeenCalledTimes(1) expect(fn2).toHaveBeenCalledWith(1) }) + + test('only trim string parameter when work with v-model on component', () => { + const Foo = defineComponent({ + render() {}, + created() { + this.$emit('update:modelValue', ' foo ', { bar: ' bar ' }) + } + }) + + const fn = jest.fn() + const Comp = () => + h(Foo, { + modelValue: null, + modelModifiers: { trim: true }, + 'onUpdate:modelValue': fn + }) + + render(h(Comp), nodeOps.createElement('div')) + + expect(fn).toHaveBeenCalledTimes(1) + expect(fn).toHaveBeenCalledWith('foo', { bar: ' bar ' }) + }) test('isEmitListener', () => { const options = { diff --git a/packages/runtime-core/src/componentEmits.ts b/packages/runtime-core/src/componentEmits.ts index b113eaa535..03835b53f2 100644 --- a/packages/runtime-core/src/componentEmits.ts +++ b/packages/runtime-core/src/componentEmits.ts @@ -8,6 +8,7 @@ import { isArray, isFunction, isObject, + isString, isOn, toNumber, UnionToIntersection @@ -122,7 +123,7 @@ export function emit( }Modifiers` const { number, trim } = props[modifiersKey] || EMPTY_OBJ if (trim) { - args = rawArgs.map(a => a.trim()) + args = rawArgs.map(a => isString(a) ? a.trim() : a) } if (number) { args = rawArgs.map(toNumber)