From 1d4c4df4fa177619001c4ae813ff7f9bebc71481 Mon Sep 17 00:00:00 2001 From: neverland Date: Sat, 11 Dec 2021 10:39:56 +0800 Subject: [PATCH] fix(DatetimePicker): should update value after calling picker methods (#10028) --- src/datetime-picker/index.js | 2 +- src/datetime-picker/shared.js | 24 ++++++++++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/datetime-picker/index.js b/src/datetime-picker/index.js index 5785c0e85..5d278e36f 100644 --- a/src/datetime-picker/index.js +++ b/src/datetime-picker/index.js @@ -13,7 +13,7 @@ export default createComponent({ methods: { // @exposed-api getPicker() { - return this.$refs.root.getPicker(); + return this.$refs.root.getProxiedPicker(); }, }, diff --git a/src/datetime-picker/shared.js b/src/datetime-picker/shared.js index a59cdbbac..8f301cbe1 100644 --- a/src/datetime-picker/shared.js +++ b/src/datetime-picker/shared.js @@ -60,27 +60,43 @@ export const TimePickerMixin = { if (!oldVal) { this.$emit('input', null); } else { - this.$emit('input', val) + this.$emit('input', val); } }, }, mounted() { this.updateColumnValue(); - this.$nextTick(() => { this.updateInnerValue(); }); }, methods: { - // @exposed-api getPicker() { return this.$refs.picker; }, + // https://github.com/youzan/vant/issues/10013 + getProxiedPicker() { + const { picker } = this.$refs; + if (picker) { + const proxy = (fn) => (...args) => { + picker[fn](...args); + this.updateInnerValue(); + }; + return { + ...picker, + setValues: proxy('setValues'), + setIndexes: proxy('setIndexes'), + setColumnIndex: proxy('setColumnIndex'), + setColumnValue: proxy('setColumnValue'), + }; + } + }, + onConfirm() { - this.$emit('input', this.innerValue) + this.$emit('input', this.innerValue); this.$emit('confirm', this.innerValue); },