美文网首页
对于前端开发,表单提交的最后一步该干些什么

对于前端开发,表单提交的最后一步该干些什么

作者: 编程范儿 | 来源:发表于2023-06-04 17:33 被阅读0次

如果问一个前端开发人员,表单操作的最后一步是什么?

他可能会说,是对表单的输入值做有效校验。要我说,这还不是最后一步。不知道你有没有遇到这样的需求,当我们提交表单之前,会请求接口做出一些判断,然后会补充一些表单信息再提交,这时候的交互可能是这样子的:弹出一个确认窗口,并携带一个子表单,需要用户做出一些选择后再进行按钮的提交或者取消操作。

这个时候我们可以使用 Message Box 消息弹出框组件

ElMessageBox.prompt('请输入内容', 'Tip', {
    confirmButtonText: '确定',
    cancelButtonText: '取消',
    inputPattern: /^.+$/,
    inputErrorMessage: '输入内容不能为空',
  })
    .then(({ value }) => {
      ElMessage({
        type: 'success',
        message: `输入的内容为:${value}`,
      })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: '取消输入',
      })
    })

但是如果我们需要的不是一个输入框,而是一个 select 组件或者 radio switch 组件的话,怎么办?Element ElMessageBox.prompt 组件只提供了 输入内容的功能。

这里我们可以使用它 VNode 的功能,message 属性不仅支持传入字符串,还可以是 VNode 。借助 Vue 的 h 函数,实现插入任意组件的功能。

对于表单的选择,我们可以使用 ElSwitch 组件

ElMessageBox({
      title: "提示",
      message: () =>
        h("div", {}, [
          h(
            "p",
            { style: { "margin-bottom": "10px" } },
            "选择导出数据类型,默认只导出当前页的表格数据"
          ),
          h(ElSwitch, {
            modelValue: checked.value,
            activeText: "全部",
            activeValue: true,
            inactiveText: "当前页",
            inactiveValue: false,
            "onUpdate:modelValue": (val: boolean) => {
              checked.value = val;
            }
          })
        ])
    })
      .then(async () => {
        if (checked.value) {
          // todo
        }
      })
      .catch(() => {
        // todo
      });

对于下拉选项我们使用 ElSelect 组件,然后子组件传入由多个选项 ElOption 组成的数组。

let childEles = [];
const { Code, Data } = await getPrdLineInfo();
if (Code === 0 && Data.length) {
  childEles = Data.map(el => {
    if (el.IsSelected) {
      formData.value.ProductLineId = el.PrdLineId;
    }
    return h(ElOption, {
      value: el.PrdLineId,
      label: el.PrdLineName
    });
  });
}
ElMessageBox({
  title: "提示",
  showCancelButton: true,
  message: () =>
    h("div", [
      h(
        "p",
        { style: { "margin-bottom": "10px" } },
        message + ",确定要提交数据吗?"
      ),
      h("p", { style: { "margin-bottom": "5px" } }, "选择产品线"),
      h(
        ElSelect,
        {
          modelValue: formData.value.ProductLineId,
          "onUpdate:modelValue": (val: string) => {
            formData.value.ProductLineId = val;
          },
          style: { width: "100%" }
        },
        () => childEles
      )
    ])
})
  .then(async () => {
   // todo
  })
  .catch(() => {
    // todo
  });

有了 VNode 支持就自由多了,我们就可以在表单提交前的确认弹窗里做很多事,表单提交意味着数据将要传到服务端,不能不谨慎。

相关文章

  • 表单ajax和servlet

    一、前言 对于后端开发来说,经常要和前端进行联系的两个面就是:1、表单form提交至servlet。2、ajax提...

  • HTML表单使用方法

    Html中的form表单常用于用户信息的填写和提交,在前端开发中使用较为广泛。 form对象 建立一个form表单...

  • 阻止form表单提交跳转

    我们在前端开发过程中,会经常把数据提交给后台,其中少不了需要form进行表单提交。但是碰到在form中提交会默认跳...

  • Flask-layer

    flask结合layer实现功能: 前端提交表单后,flask返回一段HTML,用于关闭layer提交后的表单。

  • 程序心得

    前端表单提交: 获取点击事件传过来的表单值,封装成js对象 将其它比如小程序选择器等本地非表单属性添加到该对象中 ...

  • 12、Struts2表单重复提交

    什么是表单重复提交表单的重复提交:若刷新表单页面, 再提交表单不算重复提交.在不刷新表单页面的前提下:多次点击提交...

  • async-validator表单验证1

    前端开发中表单提交校验是一个很常见的功能;于是就仿照ElementUi写了一个表单验证的组件。本文就简单介绍一下 ...

  • 防止表单重复提交

    嘿,大家好,今天我来介绍几种简单的防止表单重复提交的方法: 防止表单重复提交 方法一:前端方式 当点击提交或者保存...

  • vuex-orm简介

    前情提要 前端开发中会难免会遇到复杂表单提交的情况,我自己也实现过一个非常非常巨大的表单,是关于个人信息录入的。数...

  • Web中的常用的两种表单验证

    今天介绍下web开发中常用的两种表单验证,form提交和ajax提交 form提交 表单是通过form提交时,用户...

网友评论

      本文标题:对于前端开发,表单提交的最后一步该干些什么

      本文链接:https://www.haomeiwen.com/subject/kcmbedtx.html