common-components/label-picker/label-picker.js

/**
 * @module label-picker
 * @description 选择器组件
 * @property {string}  label          标签文本
 * @property {string}  placeholder    默认提示文本
 * @property {boolean} required       是否必输,默认false
 * @property {boolean} validate       是否校验,默认false
 * @property {number}  list           选择列表
 * @property {number}  selected       设置选择索引,默认-1
 * @property {number}  index          在父组件中的标记索引,以便对应数据,默认-1
 * @fires valueChange  失焦处理分发事件,向父元素传递值和在父组件中的标记索引
 */
Component({

  options: {
    addGlobalClass: true,
  },

  properties: {
    // 标签名
    label: {
      type: String,
      value: "",
    },
    // 显示文字(包括提示文字)
    placeholder: {
      type: String,
      value: "",
    },
    // 是否必输
    required: {
      type: Boolean,
      value: false,
    },
    // 校验标志
    validate: {
      type: Boolean,
      value: false,
    },
    // 选中的选项索引
    selected: {
      type: Number,
      value: -1,
    },
    // 用于标记数据的索引
    index: {
      type: Number,
      value: -1,
    },
    // 菜单列表
    list: {
      type: Array,
      value: [],
    }
  },

  data: {
    // 是否显示下拉框
    show: false,
  },

  methods: {

    switchPopup: function() {
      this.setData({
        show: !this.data.show,
      })
    },

    choose: function(e) {
      let self = this;
      let idx = e.currentTarget.dataset.index;
      this.setData({
        selected: idx + 1,
      });
      setTimeout(function() {
        self.setData({
          show: !self.data.show,
          placeholder: self.data.list[idx],
        });
        self.triggerEvent('valueChange', {
          index: self.data.index,
          value: self.data.list[idx]
        })
      }, 300);
    },

  },

})