项目概况

hooks

2026-01-291 min read未分类
v-ui-pro

useComponentRef

ts
1import {ref} from "vue"; 2 3/** 4 * 组件类型标注 5 * @param _component 组件实例 6 * @returns 完整类型标注的响应式组件实例 7 */ 8export const useComponentRef = <T extends abstract new (...args: any) => any>( 9 _component: T 10) => { 11 return ref<InstanceType<T>>(); 12}; 13 14

useFormModel

ts
1import {FormSearchProps} from "../components/v-ui-pro"; 2import {Form} from "@arco-design/web-vue"; 3import {useComponentRef} from "./useComponentRef.ts"; 4import {ref, watch} from "vue"; 5 6export function useFormModel(props: FormSearchProps, emit: any) { 7 8 const formRef = useComponentRef(Form) 9 10 const {modelValue, loading, formItemAttributes} = props; 11 12 console.log(`解构modelValue:${JSON.stringify(modelValue)}`) 13 formItemAttributes.forEach(item => { 14 // 没有这个 key 15 if (!Object.keys(modelValue).includes(item.field)) { 16 modelValue[item.field] = item.defaultValue ?? null 17 } else { 18 modelValue[item.field] = item.defaultValue ?? null 19 } 20 }) 21 22 const model = ref(modelValue); 23 24 watch(() => 25 model.value, 26 (newVal) => { 27 emit('update:modelValue', newVal) 28 }, 29 {deep: true, immediate: false} 30 ) 31 32 console.log(`绑定属性modelValue:${JSON.stringify(model.value)}`) 33 return {model, loading, formItemAttributes, formRef} 34 35} 36