Vue封装Vant选择器组件


由于Vant原生的选择器组件只支持值列表的数据,而不支持键值对列表的数据,并且使用较为麻烦,于是对Vant的选择器组件进行了封装。

封装组件代码

<template>
  <!-- 封装vant的选择器 -->
  <div>
    <van-field
      readonly
      clickable
      name="picker"
      :value="text"
      :label="label"
      :placeholder="placeholder"
      @click="showPicker = true"
    />
    <van-popup v-model="showPicker" position="bottom">
      <van-picker
        show-toolbar
        :columns="columns"
        @confirm="onConfirm"
        @cancel="showPicker = false"
      />
    </van-popup>
  </div>
</template>
<script>
export default {
  props: {
    //[{key:key1,value:value1},{key:key2,value:value2},...}]
    data: {
      default: null,
      type: Array
    },
    value: {
      default: "",
      type: [String,Number]
    },
    label: {
      default: "选择器",
      type: String
    },
    placeholder: {
      default: "点击选择",
      type: String
    }
  },
  computed: {
    columns() {
      let values = this.data.map(item => {
        return item.value;
      });
      return values;
    }
  },
  data() {
    return {
      showPicker: false,
      text: ""
    };
  },
  methods: {
    onConfirm(value, index) {
      let key = this.data[index].key;
      this.text = value;
      this.$emit("input", key);
      this.showPicker = false;
    }
  },
  watch: {
    value: {
      handler(val) {
        if (val == "" || val == undefined) {
          this.text = "";
        }
        deep: true;
      },
    },
  },
};
</script>

使用方法

<template>
  <div>
    <my-vant-pcker
      v-model="value"
      :data="data"
      label="城市选择"
      placeholder="请选择城市"
    ></my-vant-pcker>
  </div>
</template>
<script>
import MyVantPcker from "@/components/MyVantPcker";
export default {
  components: { MyVantPcker },
  data() {
    return {
      value: "",
      data: [
        {
          key: "hangzhou",
          value: "杭州"
        },
        {
          key: "shanghai",
          value: "上海"
        },
        {
          key: "beijing",
          value: "北京"
        }
      ]
    };
  }
};
</script>
参考:https://www.qinyushop.com/archives/35.html

声明:张先生的博客|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Vue封装Vant选择器组件


选择自己所爱的,然后爱自己所选择的!