当前位置: 首页 > article >正文

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>


http://www.kler.cn/a/154342.html

相关文章:

  • pytest | 框架的简单使用
  • Lua资料
  • 【计算机网络】协议定制
  • C++11(四)---可变参数模板
  • 人工智能与SEO优化中的关键词策略解析
  • Android OpenGL ES详解——glTexImage2D方法
  • Centos查看运行内存大小
  • linux shell编程
  • ardupilot开发 --- 机载计算机 篇
  • Java基础(第九期):Java中的集合 ArrayList 集合的增删改查 Java实现学生信息管理系统
  • 一、服务器准备
  • 使用coco数据集进行语义分割(1):数据预处理,制作ground truth
  • 【大数据】区分 hdfs dfs -ls 与 hdfs dfs -ls /
  • 动静分离策略
  • 【C语言】与文件有关的操作
  • flutter的TextField参数、案例整理(下)
  • 图像异常检测研究现状综述
  • Springboot自定义starter
  • dockerfile文件:copy和add 异同
  • 第九节HarmonyOS 常用基础组件1-Text
  • 基于Spring、SpringMVC、MyBatis的网上服装销售系统
  • 【android开发-10】android中四种布局详细介绍
  • Docker部署Plik临时文件上传系统并且实现远程访问
  • 7 种 JVM 垃圾收集器详解
  • Asp.net core WebApi 配置自定义swaggerUI和中文注释,Jwt Bearer配置
  • (CS61A)Homework 1: Variables Functions, Control