From 998c7d8da67e713be2073e3a113afb7070da5715 Mon Sep 17 00:00:00 2001 From: chenjiahan Date: Sun, 16 Aug 2020 15:50:46 +0800 Subject: [PATCH] feat: migrate DropdownMenu --- components.js | 2 ++ docs/markdown/changelog-v3.zh-CN.md | 1 + src/dropdown-item/index.js | 21 ++++++++++++++------- src/dropdown-menu/index.js | 4 ++-- vant.config.js | 16 ++++++++-------- 5 files changed, 27 insertions(+), 17 deletions(-) diff --git a/components.js b/components.js index 382e8e4d8..46e1d65dd 100644 --- a/components.js +++ b/components.js @@ -57,4 +57,6 @@ module.exports = [ 'search', 'stepper', 'uploader', + 'dropdown-menu', + 'dropdown-item', ]; diff --git a/docs/markdown/changelog-v3.zh-CN.md b/docs/markdown/changelog-v3.zh-CN.md index ef1a0d57c..354935c8d 100644 --- a/docs/markdown/changelog-v3.zh-CN.md +++ b/docs/markdown/changelog-v3.zh-CN.md @@ -44,6 +44,7 @@ Vant 遵循 [Semver](https://semver.org/lang/zh-CN/) 语义化版本规范。 - Checkbox - CheckboxGroup - DatetimePicker +- DropdownItem - Field - Radio - RadioGroup diff --git a/src/dropdown-item/index.js b/src/dropdown-item/index.js index 9bf2d2171..1c5655c76 100644 --- a/src/dropdown-item/index.js +++ b/src/dropdown-item/index.js @@ -17,9 +17,9 @@ export default createComponent({ mixins: [PortalMixin({ ref: 'wrapper' }), ChildrenMixin('vanDropdownMenu')], props: { - value: null, title: String, disabled: Boolean, + modelValue: null, titleClass: String, options: { type: Array, @@ -31,6 +31,8 @@ export default createComponent({ }, }, + emits: ['open', 'opened', 'close', 'closed', 'change', 'update:modelValue'], + data() { return { transition: true, @@ -46,7 +48,7 @@ export default createComponent({ } const match = this.options.filter( - (option) => option.value === this.value + (option) => option.value === this.modelValue ); return match.length ? match[0].text : ''; }, @@ -98,6 +100,10 @@ export default createComponent({ event.stopPropagation(); } }, + + onTogglePopup(show) { + this.showPopup = show; + }, }, render() { @@ -112,7 +118,7 @@ export default createComponent({ } = this.parent; const Options = this.options.map((option) => { - const active = option.value === this.value; + const active = option.value === this.modelValue; return ( { this.showPopup = false; - if (option.value !== this.value) { - this.$emit('input', option.value); + if (option.value !== this.modelValue) { + this.$emit('update:modelValue', option.value); this.$emit('change', option.value); } }} @@ -154,7 +160,7 @@ export default createComponent({ onClick={this.onClickWrapper} > {Options} - {this.slots('default')} + {this.$slots.default?.()} diff --git a/src/dropdown-menu/index.js b/src/dropdown-menu/index.js index 383591887..91d6ca75e 100644 --- a/src/dropdown-menu/index.js +++ b/src/dropdown-menu/index.js @@ -117,7 +117,7 @@ export default createComponent({ style={{ color: item.showPopup ? this.activeColor : '' }} >
- {item.slots('title') || item.displayTitle} + {item.$slots.title ? item.$slots.title() : item.displayTitle}
@@ -132,7 +132,7 @@ export default createComponent({ > {Titles} - {this.slots('default')} + {this.$slots.default?.()} ); }, diff --git a/vant.config.js b/vant.config.js index 4dacece85..f96c2980f 100644 --- a/vant.config.js +++ b/vant.config.js @@ -188,10 +188,10 @@ module.exports = { path: 'dialog', title: 'Dialog 弹出框', }, - // { - // path: 'dropdown-menu', - // title: 'DropdownMenu 下拉菜单', - // }, + { + path: 'dropdown-menu', + title: 'DropdownMenu 下拉菜单', + }, { path: 'loading', title: 'Loading 加载', @@ -522,10 +522,10 @@ module.exports = { path: 'dialog', title: 'Dialog', }, - // { - // path: 'dropdown-menu', - // title: 'DropdownMenu', - // }, + { + path: 'dropdown-menu', + title: 'DropdownMenu', + }, { path: 'loading', title: 'Loading',