From 0ed0337de05ce35a540514f506b8a699af16e83e Mon Sep 17 00:00:00 2001 From: chenjiahan <chenjiahan@youzan.com> Date: Sun, 16 Aug 2020 15:29:57 +0800 Subject: [PATCH] feat: migrate Stepper component --- components.js | 1 + docs/markdown/changelog-v3.zh-CN.md | 2 ++ src/stepper/README.md | 2 +- src/stepper/README.zh-CN.md | 2 +- src/stepper/demo/index.vue | 2 +- src/stepper/index.js | 50 +++++++++++++++++------------ vant.config.js | 16 ++++----- 7 files changed, 44 insertions(+), 31 deletions(-) diff --git a/components.js b/components.js index 1e669fd16..3f9709669 100644 --- a/components.js +++ b/components.js @@ -55,4 +55,5 @@ module.exports = [ 'number-keyboard', 'password-input', 'search', + 'stepper', ]; diff --git a/docs/markdown/changelog-v3.zh-CN.md b/docs/markdown/changelog-v3.zh-CN.md index a9a0169b5..d9d1433d4 100644 --- a/docs/markdown/changelog-v3.zh-CN.md +++ b/docs/markdown/changelog-v3.zh-CN.md @@ -47,6 +47,8 @@ Vant 遵循 [Semver](https://semver.org/lang/zh-CN/) 语义化版本规范。 - Field - Radio - RadioGroup +- Search +- Stepper - Switch - Sidebar diff --git a/src/stepper/README.md b/src/stepper/README.md index 9d2f81b47..93be8cfb4 100644 --- a/src/stepper/README.md +++ b/src/stepper/README.md @@ -72,7 +72,7 @@ export default { ### Async Change ```html -<van-stepper :value="value" async-change @change="onChange" /> +<van-stepper :model-value="value" async-change @change="onChange" /> ``` ```js diff --git a/src/stepper/README.zh-CN.md b/src/stepper/README.zh-CN.md index 9043c3394..e17b6a46b 100644 --- a/src/stepper/README.zh-CN.md +++ b/src/stepper/README.zh-CN.md @@ -94,7 +94,7 @@ export default { 如果需要异步地修改输入框的值,可以设置`async-change`属性,并在`change`事件中手动修改`value` ```html -<van-stepper :value="value" async-change @change="onChange" /> +<van-stepper :model-value="value" async-change @change="onChange" /> ``` ```js diff --git a/src/stepper/demo/index.vue b/src/stepper/demo/index.vue index 7119ee440..399cdb52f 100644 --- a/src/stepper/demo/index.vue +++ b/src/stepper/demo/index.vue @@ -33,7 +33,7 @@ </van-cell> <van-cell center :title="t('asyncChange')"> - <van-stepper :value="stepper6" async-change @change="onChange" /> + <van-stepper :model-value="stepper6" async-change @change="onChange" /> </van-cell> <van-cell v-if="!isWeapp" center :title="t('roundTheme')"> diff --git a/src/stepper/index.js b/src/stepper/index.js index ecf0b0942..4212756bd 100644 --- a/src/stepper/index.js +++ b/src/stepper/index.js @@ -24,10 +24,10 @@ export default createComponent({ mixins: [FieldMixin], props: { - value: null, theme: String, integer: Boolean, disabled: Boolean, + modelValue: null, allowEmpty: Boolean, inputWidth: [Number, String], buttonSize: [Number, String], @@ -71,12 +71,24 @@ export default createComponent({ }, }, + emits: [ + 'plus', + 'blur', + 'minus', + 'focus', + 'change', + 'overlimit', + 'update:modelValue', + ], + data() { - const defaultValue = isDef(this.value) ? this.value : this.defaultValue; + const defaultValue = isDef(this.modelValue) + ? this.value + : this.defaultValue; const value = this.format(defaultValue); - if (!equal(value, this.value)) { - this.$emit('input', value); + if (!equal(value, this.modelValue)) { + this.$emit('update:modelValue', value); } return { @@ -129,14 +141,14 @@ export default createComponent({ integer: 'check', decimalLength: 'check', - value(val) { + modelValue(val) { if (!equal(val, this.currentValue)) { this.currentValue = this.format(val); } }, currentValue(val) { - this.$emit('input', val); + this.$emit('update:modelValue', val); this.$emit('change', val, { name: this.name }); }, }, @@ -194,7 +206,7 @@ export default createComponent({ emitChange(value) { if (this.asyncChange) { - this.$emit('input', value); + this.$emit('update:modelValue', value); this.$emit('change', value, { name: this.name }); } else { this.currentValue = value; @@ -272,20 +284,18 @@ export default createComponent({ render() { const createListeners = (type) => ({ - on: { - click: (e) => { - // disable double tap scrolling on mobile safari - e.preventDefault(); - this.type = type; - this.onChange(); - }, - touchstart: () => { - this.type = type; - this.onTouchStart(); - }, - touchend: this.onTouchEnd, - touchcancel: this.onTouchEnd, + onClick: (e) => { + // disable double tap scrolling on mobile safari + e.preventDefault(); + this.type = type; + this.onChange(); }, + onTouchstart: () => { + this.type = type; + this.onTouchStart(); + }, + onTouchend: this.onTouchEnd, + onTouchcancel: this.onTouchEnd, }); return ( diff --git a/vant.config.js b/vant.config.js index 4b55b09cd..74e1f7709 100644 --- a/vant.config.js +++ b/vant.config.js @@ -163,10 +163,10 @@ module.exports = { path: 'slider', title: 'Slider 滑块', }, - // { - // path: 'stepper', - // title: 'Stepper 步进器', - // }, + { + path: 'stepper', + title: 'Stepper 步进器', + }, { path: 'switch', title: 'Switch 开关', @@ -497,10 +497,10 @@ module.exports = { path: 'slider', title: 'Slider', }, - // { - // path: 'stepper', - // title: 'Stepper', - // }, + { + path: 'stepper', + title: 'Stepper', + }, { path: 'switch', title: 'Switch',