
下面同样的用法二次封装的 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> 2 jy02534655 2023 年 12 月 16 日 如果二次封装的时候不使用 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 直接做双向绑定 |
3 Brain777 2023 年 12 月 16 日 // 调用 <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> 可以这样写 |