vue 之 render 封装一个select组件

本文档展示了如何在Vue.js中利用render函数封装一个自定义的Select组件,包括设置属性如value、optionData、placeholder,以及处理change事件。组件支持clearable属性,并提供了示例代码展示其在父组件中的使用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vue 之 render 封装一个select组件

父组件

    value - {{ value }} ; value2 - {{ value2 }}
    <!--  disabled clearable   -->
    <Select v-model="value" :option-data="optionData" placeholder="请选择" clearable />
    <Select v-model="value2" :option-data="optionData" />

      value: '', // 默认值为空字符串
      value2: 'area1',
      optionData: [
        { label: '区域1', value: 'area1' },
        { label: '区域2', value: 'area2' }
      ],

Select.vue

<script>
export default {
  name: 'Select',
  props: {
    value: {
      default: '',
      type: [String, Number]
    },
    optionData: {
      default: () => {
        return []
      },
      type: Array
    }
  },
  computed: {
    newValue: {
      get({ value }) {
        return value
      },
      set(val) {
        this.$emit('input', val)
      }
    }
  },
  methods: {
    onChangeHandle(val) {
      this.newValue = val
    }
  },
  render(createElement) {
    return createElement(
      // 标签
      'el-select',
      // 相关属性参数
      {
        // html 相关的属性 placeholder id 等
        attrs: {
          ...this.$attrs //  ( { placeholder:请输入 } )
        },
        // props相关的
        props: {
          value: this.newValue
        },
        // 事件相关
        on: {
          change: this.onChangeHandle
        }
      },
      this.optionData && this.optionData.map(option => {
        return createElement(
          'el-option',
          {
            props: {
              label: option.label,
              value: option.value
            }
          }
        )
      })

    )
  }
}
</script>


效果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值