自己封装的基于ant design vue 的下拉框的组件

接手别人的项目,明明已经封装好了下拉框的组件,奈何某些人嫌弃不好用不能试用其他所有的接口。没办法,自己封一个组件吧。各位觉得好用可以收藏一下,我也是为了下次懒得动手就拿上来保存着吧。

<template>
  <div>
    <a-select
      v-model="value_"
      :default-value="defaultValue"
      @change="handleChange"
      :placeholder="placeholder"
      allowClear
    >
      <a-select-option v-for="item in selectList" :key="item[props.id]" :value="item[props.id]">
        {{ item[props.label] }}
      </a-select-option>
    </a-select>
  </div>
</template>
<script>
import { getPublicSelectList } from "@/api/api.js";

export default {
  name: 'PublicSelect',
  props: {
    /*下拉框的接口地址url */
    url: {
      type: String,
      default: ''
    },
    /* 如果当前下卡框有参数,传params */
    params: {
      type: Object,
      default: () => { }
    },
    /* props对应下拉框的id和label,默认情况下id为‘value’,label为‘label’ */
    props: {
      type: Object,
      default: {
        id: 'value',
        label: 'label'
      }
    },
    /* 提示文字 */
    placeholder: {
      type: String,
      default: '请选择'
    },
    /* 如果需要默认值,对应的是下拉框id */
    defaultValue: {
      type: String,
      default: ''
    },
    /* 绑定的字段 */
    value: {
      type: String,
      default: ''
    },
  },
  data() {
    return {
      selectList: [],
      value_:this.value?this.value:undefined
    }
  },
  watch: {
    props: {
      deep: true,
      handler(newvalue, oldvalue) {
        if (Object.values(newvalue).length) {
          const first = Object.keys(newvalue)
          const second = Object.keys(oldvalue)
          if (first.length != second.length) {
            return
          }
          for (let i in newvalue) {
            if (newvalue[i] != oldvalue[i]) {
              return
            }
          }
          this.init()
        }
      }
    },
    value:{
        handler(newvalue, oldvalue) {
            if(!newvalue){
                this.value_ = undefined
            }
        }
    }
    },
    created() {
      this.init()
    },
    methods: {
      init() {
        getPublicSelectList(this.url, this.params).then(res => {
          this.selectList = res.result
        })
      },
      handleChange(value) {
        this.$emit('update:value', value)
      },
    },
  }
</script>
<style lang='less' scoped>
</style>

然后使用的地方


              <PublicSelect 
              :value.sync="queryParam.status" 
              url="/api/list/payment_status" 
              :props="{id:'value',label:'label'}" 
              placeholder="交易状态" 
              style="width: 180px"/>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值