下面同样的用法二次封装的 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 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 直接做双向绑定 |
3
Brain777 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> 可以这样写 |