mirror of
https://github.com/youzan/vant.git
synced 2025-10-15 15:40:52 +00:00
Signed-off-by: Kayne <w.zengkai@gmail.com>
This commit is contained in:
@@ -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,
|
||||
|
@@ -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 () => (
|
||||
<>
|
||||
<button
|
||||
class="clear-button"
|
||||
onClick={() => (modelValue.value = [])}
|
||||
/>
|
||||
<Picker v-model={modelValue.value} columns={columns} />
|
||||
</>
|
||||
);
|
||||
},
|
||||
});
|
||||
const button = wrapper.find('.clear-button');
|
||||
await button.trigger('click');
|
||||
const picker = wrapper.findComponent(Picker);
|
||||
await picker.find('.van-picker__confirm').trigger('click');
|
||||
expect(picker.emitted('confirm')![0]).toEqual([
|
||||
{
|
||||
selectedOptions: [{ text: '1', value: '1' }],
|
||||
selectedValues: ['1'],
|
||||
selectedIndexes: [0],
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
Reference in New Issue
Block a user