From f28dca049c381583c0787644025ebc266bed1289 Mon Sep 17 00:00:00 2001 From: "qingwei.li" Date: Thu, 29 Dec 2016 16:55:41 +0800 Subject: [PATCH] DatePicker: fix change event trigger multiple times, fixed #2060 --- packages/date-picker/src/picker.vue | 21 ++++++++++++--------- packages/date-picker/src/util/index.js | 2 +- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/date-picker/src/picker.vue b/packages/date-picker/src/picker.vue index 6e07aab70..dab7120f8 100644 --- a/packages/date-picker/src/picker.vue +++ b/packages/date-picker/src/picker.vue @@ -318,6 +318,9 @@ export default { }, created() { + this.cachePicker = {}; + this.cacheChange = {}; + // vue-popper this.options = { boundariesPadding: 0, @@ -343,17 +346,17 @@ export default { } }, - dateIsUpdated(date) { + dateIsUpdated(date, cache) { let updated = true; if (Array.isArray(date)) { - if (equalDate(this.cacheDateMin, date[0]) && - equalDate(this.cacheDateMax, date[1])) updated = false; - this.cacheDateMin = date[0]; - this.cacheDateMax = date[1]; + if (equalDate(cache.cacheDateMin, date[0]) && + equalDate(cache.cacheDateMax, date[1])) updated = false; + cache.cacheDateMin = date[0]; + cache.cacheDateMax = date[1]; } else { - if (equalDate(this.cacheDate, date)) updated = false; - this.cacheDate = date; + if (equalDate(cache.cacheDate, date)) updated = false; + cache.cacheDate = date; } return updated; @@ -443,9 +446,9 @@ export default { this.picker.$on('dodestroy', this.doDestroy); this.picker.$on('pick', (date, visible = false) => { - if (this.dateIsUpdated(date)) this.$emit('input', date); + if (this.dateIsUpdated(date, this.cachePicker)) this.$emit('input', date); - this.$nextTick(() => this.$emit('change', this.visualValue)); + this.$nextTick(() => this.dateIsUpdated(date, this.cacheChange) && this.$emit('change', this.visualValue)); this.pickerVisible = this.picker.visible = visible; this.picker.resetView && this.picker.resetView(); }); diff --git a/packages/date-picker/src/util/index.js b/packages/date-picker/src/util/index.js index 878ddb859..d007afa2a 100644 --- a/packages/date-picker/src/util/index.js +++ b/packages/date-picker/src/util/index.js @@ -9,7 +9,7 @@ const newArray = function(start, end) { }; export const equalDate = function(dateA, dateB) { - return new Date(dateA).getTime() === new Date(dateB).getTime(); + return dateA === dateB || new Date(dateA).getTime() === new Date(dateB).getTime(); }; export const toDate = function(date) {