From 725af9d1a06fa9008e0844327ebd3658feb585dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E5=A5=95?= Date: Tue, 20 Mar 2018 11:59:33 +0800 Subject: [PATCH] Pagination: trigger current-change event on user input (#10247) --- CHANGELOG.zh-CN.md | 2 +- packages/pagination/src/pagination.js | 22 +++++++++++++++++++--- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.zh-CN.md b/CHANGELOG.zh-CN.md index d11c033bb..91db70033 100644 --- a/CHANGELOG.zh-CN.md +++ b/CHANGELOG.zh-CN.md @@ -388,7 +388,7 @@ - Steps - 移除 `center` 属性 - 现在步骤条将默认充满父容器 - - DatePicker +- DatePicker - `change` 事件参数现在为组件的绑定值,格式由 `value-format` 控制 - Table - 移除通过 `inline-template` 自定义列模板的功能 diff --git a/packages/pagination/src/pagination.js b/packages/pagination/src/pagination.js index ead77a084..cc4474c24 100644 --- a/packages/pagination/src/pagination.js +++ b/packages/pagination/src/pagination.js @@ -50,7 +50,9 @@ export default { data() { return { internalCurrentPage: 1, - internalPageSize: 0 + internalPageSize: 0, + lastEmittedPage: -1, + userChangePageSize: false }; }, @@ -194,6 +196,7 @@ export default { handleChange(val) { if (val !== this.$parent.internalPageSize) { this.$parent.internalPageSize = val = parseInt(val, 10); + this.$parent.userChangePageSize = true; this.$parent.$emit('size-change', val); } } @@ -234,6 +237,7 @@ export default { }, handleChange(value) { this.$parent.internalCurrentPage = this.$parent.getValidCurrentPage(value); + this.$parent.emitChange(); this.oldValue = null; this.resetValueIfNeed(value); }, @@ -295,18 +299,21 @@ export default { methods: { handleCurrentChange(val) { this.internalCurrentPage = this.getValidCurrentPage(val); + this.emitChange(); }, prev() { if (this.disabled) return; const newVal = this.internalCurrentPage - 1; this.internalCurrentPage = this.getValidCurrentPage(newVal); + this.emitChange(); }, next() { if (this.disabled) return; const newVal = this.internalCurrentPage + 1; this.internalCurrentPage = this.getValidCurrentPage(newVal); + this.emitChange(); }, getValidCurrentPage(value) { @@ -332,6 +339,15 @@ export default { } return resetValue === undefined ? value : resetValue; + }, + + emitChange() { + this.$nextTick(() => { + if (this.internalCurrentPage !== this.lastEmittedPage) { + this.$emit('current-change', this.internalCurrentPage); + this.lastEmittedPage = this.internalCurrentPage; + } + }); } }, @@ -376,12 +392,10 @@ export default { this.internalCurrentPage = newVal; if (oldVal !== newVal) { this.$emit('update:currentPage', newVal); - this.$emit('current-change', this.internalCurrentPage); } }); } else { this.$emit('update:currentPage', newVal); - this.$emit('current-change', this.internalCurrentPage); } }, @@ -392,7 +406,9 @@ export default { this.internalCurrentPage = 1; } else if (oldPage > newVal) { this.internalCurrentPage = newVal === 0 ? 1 : newVal; + this.userChangePageSize && this.emitChange(); } + this.userChangePageSize = false; } } };