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