| <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>  |