From ea75a968ce89d77d3ed0a0fc40d4ece40b9e2705 Mon Sep 17 00:00:00 2001 From: KayneWang Date: Sun, 20 Apr 2025 22:11:03 +0900 Subject: [PATCH] fix(Picker): make sure confirm params' behavior consistent (#13423) (#13425) Signed-off-by: Kayne --- packages/vant/src/picker/Picker.tsx | 35 ++++++++++---------- packages/vant/src/picker/test/index.spec.tsx | 32 ++++++++++++++++++ 2 files changed, 49 insertions(+), 18 deletions(-) diff --git a/packages/vant/src/picker/Picker.tsx b/packages/vant/src/picker/Picker.tsx index 81ee1b80e..60747676c 100644 --- a/packages/vant/src/picker/Picker.tsx +++ b/packages/vant/src/picker/Picker.tsx @@ -147,7 +147,9 @@ export default defineComponent({ }; const getEventParams = () => ({ - selectedValues: selectedValues.value.slice(0), + selectedValues: selectedValues.value.length + ? selectedValues.value.slice(0) + : resetSelectedValues(currentColumns.value), selectedOptions: selectedOptions.value, selectedIndexes: selectedIndexes.value, }); @@ -268,23 +270,20 @@ export default defineComponent({ } }; - watch( - currentColumns, - (columns) => { - columns.forEach((options, index) => { - if ( - options.length && - !isOptionExist(options, selectedValues.value[index], fields.value) - ) { - setValue( - index, - getFirstEnabledOption(options)![fields.value.value], - ); - } - }); - }, - { immediate: true }, - ); + const resetSelectedValues = (columns: PickerColumn[]) => { + columns.forEach((options, index) => { + if ( + options.length && + !isOptionExist(options, selectedValues.value[index], fields.value) + ) { + setValue(index, getFirstEnabledOption(options)![fields.value.value]); + } + }); + }; + + watch(currentColumns, (columns) => resetSelectedValues(columns), { + immediate: true, + }); // preserve last emitted model value // when props.modelValue is updated by parent component, diff --git a/packages/vant/src/picker/test/index.spec.tsx b/packages/vant/src/picker/test/index.spec.tsx index 29a23ea34..8714c83b7 100644 --- a/packages/vant/src/picker/test/index.spec.tsx +++ b/packages/vant/src/picker/test/index.spec.tsx @@ -489,3 +489,35 @@ test('should emit correct values when clicking confirm button during column scro }, ]); }); + +test('should emit default values when clear modelValue', async () => { + const columns = [ + { text: '1', value: '1' }, + { text: '2', value: '2' }, + ]; + const wrapper = mount({ + setup() { + const modelValue = ref(['1']); + return () => ( + <> +