From eabf0b909db121d934265fcb005a89fa8bfd19df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=B6=E8=BF=9C=E6=96=B9?= Date: Sun, 25 Jun 2023 18:18:15 +0800 Subject: [PATCH 1/3] fix(vModel): fix the issue where `checked` gets reset during an update --- packages/runtime-dom/src/directives/vModel.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/runtime-dom/src/directives/vModel.ts b/packages/runtime-dom/src/directives/vModel.ts index 2cf5f4cfc16..9bf2ba0610a 100644 --- a/packages/runtime-dom/src/directives/vModel.ts +++ b/packages/runtime-dom/src/directives/vModel.ts @@ -148,14 +148,16 @@ function setChecked( { value, oldValue }: DirectiveBinding, vnode: VNode ) { - // store the v-model value on the element so it can be accessed by the - // change listener. + // #8638 + if (value === oldValue) + return // store the v-model value on the element so it can be accessed by the + // change listener. ;(el as any)._modelValue = value if (isArray(value)) { el.checked = looseIndexOf(value, vnode.props!.value) > -1 } else if (isSet(value)) { el.checked = value.has(vnode.props!.value) - } else if (value !== oldValue) { + } else { el.checked = looseEqual(value, getCheckboxValue(el, true)) } } From 6860053d73d26d5614ef4cdab2265ea2cd823022 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=B6=E8=BF=9C=E6=96=B9?= Date: Thu, 14 Sep 2023 18:25:02 +0800 Subject: [PATCH 2/3] chore: fix select update reset --- packages/runtime-dom/src/directives/vModel.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/runtime-dom/src/directives/vModel.ts b/packages/runtime-dom/src/directives/vModel.ts index 9bf2ba0610a..fdad2f0fa1c 100644 --- a/packages/runtime-dom/src/directives/vModel.ts +++ b/packages/runtime-dom/src/directives/vModel.ts @@ -207,8 +207,11 @@ export const vModelSelect: ModelDirective = { beforeUpdate(el, _binding, vnode) { el._assign = getModelAssigner(vnode) }, - updated(el, { value }) { - setSelected(el, value) + updated(el, { value, oldValue }) { + // #8579 + if (value !== oldValue) { + setSelected(el, value) + } } } From 8a85377bacafcd9230c0d8d709775aca100dde3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=9C=E6=96=B9os?= Date: Fri, 31 May 2024 09:07:52 +0800 Subject: [PATCH 3/3] fix: number not passed --- packages/runtime-dom/src/directives/vModel.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/runtime-dom/src/directives/vModel.ts b/packages/runtime-dom/src/directives/vModel.ts index 7cbdfd9bc7a..24d61b467ae 100644 --- a/packages/runtime-dom/src/directives/vModel.ts +++ b/packages/runtime-dom/src/directives/vModel.ts @@ -221,7 +221,7 @@ export const vModelSelect: ModelDirective = { updated(el, { value, oldValue, modifiers: { number } }) { // #8579 if (!el._assigning && value !== oldValue) { - setSelected(el, value) + setSelected(el, value, number) } }, }