From 7d300727d3217601a505021d270562b0c63f5030 Mon Sep 17 00:00:00 2001 From: baiyaaaaa Date: Wed, 11 Jan 2017 00:39:35 +0800 Subject: [PATCH] fix input-number change event --- packages/input-number/src/input-number.vue | 35 ++++++++++++++-------- test/unit/specs/input-number.spec.js | 10 +++---- test/unit/specs/slider.spec.js | 2 +- 3 files changed, 28 insertions(+), 19 deletions(-) diff --git a/packages/input-number/src/input-number.vue b/packages/input-number/src/input-number.vue index 5cb4d0a65..39f89a53e 100644 --- a/packages/input-number/src/input-number.vue +++ b/packages/input-number/src/input-number.vue @@ -21,10 +21,11 @@ > = this.min) { - this.$emit('change', newVal, oldVal); - this.$emit('input', newVal); - } else { - this.currentValue = oldVal; + value(value) { + const newVal = Number(value); + if (!isNaN(newVal) && newVal <= this.max && newVal >= this.min) { + this.currentValue = newVal; } } }, @@ -169,17 +164,31 @@ const value = this.value || 0; const newVal = this._increase(value, this.step); if (newVal > this.max) return; - this.currentValue = newVal; + this.setCurrentValue(newVal); }, decrease() { if (this.disabled || this.minDisabled) return; const value = this.value || 0; const newVal = this._decrease(value, this.step); if (newVal < this.min) return; - this.currentValue = newVal; + this.setCurrentValue(newVal); }, handleBlur() { this.$refs.input.setCurrentValue(this.currentValue); + }, + setCurrentValue(newVal) { + const oldVal = this.currentValue; + if (newVal <= this.max && newVal >= this.min && oldVal !== newVal) { + this.$emit('change', newVal, oldVal); + this.$emit('input', newVal); + this.currentValue = newVal; + } + }, + handleInput(value) { + const newVal = Number(value); + if (!isNaN(newVal)) { + this.setCurrentValue(newVal); + } } } }; diff --git a/test/unit/specs/input-number.spec.js b/test/unit/specs/input-number.spec.js index 73d6cd841..861b70fe2 100644 --- a/test/unit/specs/input-number.spec.js +++ b/test/unit/specs/input-number.spec.js @@ -237,7 +237,7 @@ describe('InputNumber', () => { it('invalid value reset', done => { vm = createVue({ template: ` - + `, data() { @@ -246,18 +246,18 @@ describe('InputNumber', () => { }; } }, true); - + const inputNumber = vm.$refs.inputNumber; vm.value = 100; vm.$nextTick(_ => { - expect(vm.value).to.be.equal(5); + expect(inputNumber.currentValue).to.be.equal(5); vm.value = 4; vm.$nextTick(_ => { - expect(vm.value).to.be.equal(5); + expect(inputNumber.currentValue).to.be.equal(5); vm.value = 'dsajkhd'; vm.$nextTick(_ => { - expect(vm.value).to.be.equal(5); + expect(inputNumber.currentValue).to.be.equal(5); done(); }); }); diff --git a/test/unit/specs/slider.spec.js b/test/unit/specs/slider.spec.js index fe6eb93ef..87941cac5 100644 --- a/test/unit/specs/slider.spec.js +++ b/test/unit/specs/slider.spec.js @@ -176,7 +176,7 @@ describe('Slider', () => { setTimeout(() => { triggerEvent(vm.$el.querySelector('.el-input-number'), 'keyup'); const inputNumber = vm.$el.querySelector('.el-input-number').__vue__; - inputNumber.currentValue = 40; + inputNumber.setCurrentValue(40); setTimeout(() => { expect(vm.value).to.equal(40); done();