下面同样的用法二次封装的 el-select\radio\checkbox 都可以
前端菜鸡特来情况。
// 调用
<DataRange v-model="date_range" />
// 二次封装的 DateRange 组件
<template>
  <el-date-picker
    :model-value="modelValue"
    @change="handleChange"
  />
</template>
<script setup lang="ts">
interface Props {
  modelValue?: any;
}
const props = withDefaults(defineProps<Props>(), {
  modelValue: "",
});
const emit = defineEmits<{
  "update:modelValue": [value: any];
}>();
const handleChange = (value: any) => {
  emit("update:modelValue", value);
};
</script>
|  |      2jy02534655      2023-12-16 13:27:39 +08:00 如果二次封装的时候不使用 modelValue ,可以不写,比如我对 el-input 做封装就这样 <template> <el-input> <template v-for="(item, i) in useSlotData" :key="i" #[i]> {{ item }} </template> </el-input> </template> <script setup> import { computed } from 'vue'; import { clearObject } from '@/utils'; const props = defineProps({ slotData: { type: Object, default: () => {} } }); const useSlotData = computed(() => { return clearObject(props.slotData); }); </script> 或者用 @vueuse/core 的 useVModel 直接做双向绑定 | 
|      3Brain777      2023-12-16 18:10:45 +08:00 // 调用 <DataRange v-model="date_range" /> // 二次封装的 DateRange 组件 <template> <el-date-picker v-model="date"/> </template> <script setup lang="ts"> interface Props { modelValue: string | Date; } const props = withDefaults(defineProps<Props>(), { modelValue: "", }); const emit = defineEmits(["update:modelValue"]); const date = ref<string | Date>("") watch(date,(value) => emit("update:modelValue", value)) </script> 可以这样写 |