hooks
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
14useFormModel
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