[Vue Form] Basic Select component

<template>
  <label v-if="label">{{ label }}</label>
  <select
    class="field"
    :value="modelValue"
    v-bind="{
      ...$attrs,
      onChange: ($event) => { $emit('update:modelValue', $event.target.value) }
    }"
  >
    <option
      v-for="option in options"
      :value="option"
      :key="option"
      :selected="option === modelValue"
    >{{ option }}</option>
  </select>
</template>

<script>
export default {
  props: {
    label: {
      type: String,
      default: ''
    },
    modelValue: {
      type: [String, Number],
      default: ''
    },
    options: {
      type: Array,
      required: true
    }
  }
}
</script>

 

Rewrite in Composeable API

<template>
  <label v-if="label">{{ label }}</label>
  <select
    class="field"
    v-model="modelValue"
    v-bind="$attrs"
  >
    <option
      v-for="option in options"
      :value="option"
      :key="option"
    >
      {{ option }}
    </option>
  </select>
</template>

<script setup>
import { defineProps, defineModel } from 'vue';

// Define static props
const { label, options } = defineProps({
  label: {
    type: String,
    default: ''
  },
  options: {
    type: Array,
    required: true
  }
});

// Define modelValue using defineModel for two-way binding
const modelValue = defineModel({
  type: [String, Number],
  default: ''
});
</script>

 

Usage from parent component:

<template>
  <CustomSelect
    v-model="selectedOption"
    :options="['Option 1', 'Option 2', 'Option 3']"
    label="Choose an option:"
  />
</template>

<script setup>
import { ref } from 'vue';
import CustomSelect from './CustomSelect.vue';

const selectedOption = ref('');
</script>

 

posted @   Zhentiw  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2022-12-03 [Javascript Performance] Optimisation and deoptimization
2022-12-03 [Javascript Performance] How to benchmark code performance
2022-12-03 [Typescript] 125. Extreme - Object Key Paths
2021-12-03 [AWS] Using EC2 Roles and Instance Profiles in AWS
2019-12-03 [Algorithm] 122. Best Time to Buy and Sell Stock II
2019-12-03 [ARIA] Create an Accessible Tooltip on a Text Input
2019-12-03 [Algorithm] 121. Best Time to Buy and Sell Stock
点击右上角即可分享
微信分享提示