uniapp表单校验

1,582 阅读1分钟

前几天在开发小程序的时候,需要进行表单校验,在uniapp的uni-forms组件是内置表单校验的,并且支持vue3,不过官方用法是选项式,而本人使用组合式,按照官方用法老是不生效,最后经过多次尝试,终于可以使用vue3组合式来进行表单校验。

官方网站及用法

zh.uniapp.dcloud.io/component/u…

详细用法见官网,这里主要记录一下组合式写法

vue3组合式用法

1.定义表单数据

// 表单信息
const baseFormData = ref({
  reservationPerson: "",
  reservationPhone: userIdStore.userTel,
  reservationDate: "",
  reservedNumber: "1",
  reservationPersonId: userIdStore.userId,
  serviceId: "",
});

2.定义校验规则 这里以输入框不难为空为例

const rules = {
  reservationPerson: {
    rules: [{ required: true, errorMessage: "请输入姓名" }],
  },
  reservationPhone: {
    rules: [{ required: true, errorMessage: "请输入手机号" }],
  },
};

3.组件使用

<uni-forms
        ref="formRef"
        label-position="top"
        :modelValue="baseFormData"
        :rules="rules"
        validateTrigger="blur"
      >
        <uni-forms-item label="姓名" required name="reservationPerson">
          <uni-easyinput
            v-model="baseFormData.reservationPerson"
            placeholder="请输入姓名"
          />
        </uni-forms-item>
        <uni-forms-item label="手机" required name="reservationPhone">
          <uni-easyinput
            v-model="baseFormData.reservationPhone"
            placeholder="请输入联系方式"
          />
        </uni-forms-item>
      </uni-forms>

其中uni-forms的ref="formRef"用于获取组件dom、 :modelValue="baseFormData"用于绑定表单数据、 :rules="rules"用于绑定校验规则,uni-forms-item的name属性用于绑定具体校验规则

4.触发校验

首先利用ref获取组件dom

const formRef = ref();

在事件中触发组件的validate事件即可:

const submit = async () => {
  formRef.value
    .validate()
    .then(() => {
    // 校验通过后事件
    })
};

5.自定义校验规则

const rules = {
  reservationPerson: {
    rules: [{ required: true, errorMessage: "请输入姓名" }],
  },
  reservationPhone: {
    rules: [
      { required: true, errorMessage: "请输入手机号" },
      {
        validateFunction: (rule, value, data, callback) => {
        // 写自己的规则就行,callback为错误提示信息
          if (!regTelTest(value)) {
            callback("手机号格式错误!");
          }
        },
      },
    ],
  },
};