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