Vue封装Vant选择器组件

1 篇文章 0 订阅

由于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: {
        data: {
          default: null,
          type: Array
        },
        value: {
          default: "",
          type: String
        },
        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;
        }
      }
    };
    </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>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值