form表单封装button封装的两种方式

1.插槽方式

 //子组件
<el-form-item :class="isCustom?'custom-form-item':''">
          <div v-for="(item,index) in btnList" :key="index">
            <slot :item="item" :formRef="formRef">
              <FormButton
                :formData="modelForm"
                :editable="editable"
                :data="item"
                @onClick="onClick(item)"
              ></FormButton>
            </slot>
          </div>
        </el-form-item>

<script>
function onClick(data) {
  console.log(data.onClick,"data.onClick");
  if (!data.onClick) return;
  emit(data.onClick, props.modelForm.value);
}

// 表单校验
async function validate() {
  if (!formRef.value) return;
  const result = await formRef.value.validate();
  return result;
}

// 清除表单验证
async function resetFields() {
  if (!formRef.value) return await formRef.value.resetFields();
  return await formRef.value.resetFields();
}
</script>

父组件

      <com-form :data="userSearchConfig.formItems" :modelForm="searchForm"
      :btnList="userSearchConfig.buttons">
        <template v-slot:default="{item, formRef}">
        <el-button :type="item.type" @click="item.onClick(formRef)">{
   
   {item.name}}</el-button>
      </template>
      </com-form>

<script>
const btnList = userSearchConfig.value.buttons ? userSearchConfig.value.buttons : {};
// 查询用户
const onSubmit = async (formRef) => {
   if (!formRef) return;
   await formRef.validate((valid, fields) => {
     if (valid) {
       getUserData(searchForm);
     }
   });
};
// 重置表单
const onReset = (formRef) => {
  formRef.resetFields();
};
btnList.forEach(item=>{
  if(item.onClick === 'onSubmit'){
    item.onClick = onSubmit
  }
    if(item.onClick === 'onReset'){
    item.onClick = onReset
  }
})
</script>

2.$emit方式:

              <FormButton
                :formData="modelForm"
                :editable="editable"
                :data="item"
                @onClick="onClick(item)"
              ></FormButton>
      <com-form ref="formRef" :data="userSearchConfig.formItems" :modelForm="searchForm"
      :btnList="userSearchConfig.buttons" @onReset="onReset(formRef)" @onSubmit="onSubmit(formRef)">
      </com-form>

<script>
// 查询用户
const formRef = ref();

const onSubmit = async () => {
  formRef.value.validate();
  let valid = formRef.value.validate();
  if(valid) await getUserData(searchForm);
};
// 重置表单
const onReset = () => {
  formRef.value.resetFields();
};
btnList.forEach(item=>{
  if(item.onClick === 'onSubmit'){
    item.onClick = onSubmit
  }
    if(item.onClick === 'onReset'){
    item.onClick = onReset
  }
})
</script>

猜你喜欢

转载自blog.csdn.net/qq_34569497/article/details/134648430