| <template> | 
|   <view class="u-drawdown"> | 
|     <view | 
|       class="u-dropdown__menu" | 
|       :style="{ | 
|                 height: $u.addUnit(height) | 
|             }" | 
|       ref="u-dropdown__menu" | 
|     > | 
|       <view | 
|         class="u-dropdown__menu__item" | 
|         v-for="(item, index) in menuList" | 
|         :key="index" | 
|         @tap.stop="clickHandler(item, index)" | 
|       > | 
|         <view class="u-dropdown__menu__item__content"> | 
|           <text | 
|             class="u-dropdown__menu__item__content__text" | 
|             :style="[index === current ? activeStyle : inactiveStyle]" | 
|           >{{item.title}}</text> | 
|           <view | 
|             class="u-dropdown__menu__item__content__arrow" | 
|             :class="[index === current && 'u-dropdown__menu__item__content__arrow--rotate']" | 
|           > | 
|             <u-icon | 
|               :name="menuIcon" | 
|               :size="$u.addUnit(menuIconSize)" | 
|             ></u-icon> | 
|           </view> | 
|         </view> | 
|       </view> | 
|     </view> | 
|     <view class="u-dropdown__content"> | 
|       <slot /> | 
|     </view> | 
|   </view> | 
| </template> | 
|   | 
| <script> | 
| import props from './props.js'; | 
| /** | 
|  * Dropdown | 
|  * @description | 
|  * @tutorial url | 
|  * @property {String} | 
|  * @event {Function} | 
|  * @example | 
|  */ | 
| export default { | 
|   name: 'u-dropdown', | 
|   mixins: [uni.$u.mixin, props], | 
|   data() { | 
|     return { | 
|       // �˵����� | 
|       menuList: [], | 
|       current: 0 | 
|     } | 
|   }, | 
|   computed: { | 
|    | 
|   }, | 
|   created() { | 
|     // �������������(u-dropdown-item)��this��������data��������������������С��������ѭ�����ö����� | 
|     this.children = []; | 
|   }, | 
|   methods: { | 
|     clickHandler(item, index) { | 
|       this.children.map(child => { | 
|         if(child.title === item.title) { | 
|           // this.queryRect('u-dropdown__menu').then(size => { | 
|           child.$emit('click') | 
|           child.setContentAnimate(child.show ? 0 : 300) | 
|           child.show = !child.show | 
|           // }) | 
|         } else { | 
|           child.show = false | 
|           child.setContentAnimate(0) | 
|         } | 
|       }) | 
|     }, | 
|     // ��ȡ��ǩ�ijߴ�λ�� | 
|     queryRect(el) { | 
|       // #ifndef APP-NVUE | 
|       // $uGetRectΪuView�Դ��Ľڵ��ѯ����������ĵ����ܣ�https://www.uviewui.com/js/getRect.html | 
|       // ����ڲ�һ����this.$uGetRect�������Ϊthis.$u.getRect�����߹���һ�£����Ʋ�ͬ | 
|       return new Promise(resolve => { | 
|         this.$uGetRect(`.${el}`).then(size => { | 
|           resolve(size) | 
|         }) | 
|       }) | 
|       // #endif | 
|        | 
|       // #ifdef APP-NVUE | 
|       // nvue�£�ʹ��domģ���ѯԪ�ظ߶� | 
|       // ����һ��promise���õ��ô˷�����������ʹ��then�ص� | 
|       return new Promise(resolve => { | 
|         dom.getComponentRect(this.$refs[el], res => { | 
|           resolve(res.size) | 
|         }) | 
|       }) | 
|       // #endif | 
|     }, | 
|   }, | 
| } | 
| </script> | 
|   | 
| <style lang="scss"> | 
| @import '../../libs/css/components.scss'; | 
|   | 
| .u-dropdown { | 
|    | 
|   &__menu { | 
|     @include flex; | 
|      | 
|     &__item { | 
|       flex: 1; | 
|       @include flex; | 
|       justify-content: center; | 
|        | 
|       &__content { | 
|         @include flex; | 
|         align-items: center; | 
|       } | 
|     } | 
|   } | 
| } | 
| </style> |