Skip to content

Form 表单 ​

数据收集与校验。校验逻辑全部是 @lh-ui/share 的纯函数,零平台依赖,两端行为一致。

基础用法 ​

vue
<template>
  <lh-form :model="form" :rules="rules" ref="formRef" label-width="80">
    <lh-form-item label="用户名" prop="name">
      <lh-input v-model="form.name" placeholder="请输入用户名" />
    </lh-form-item>
    <lh-form-item label="邮箱" prop="email">
      <lh-input v-model="form.email" placeholder="请输入邮箱" />
    </lh-form-item>
    <lh-button type="primary" @click="onSubmit">提交</lh-button>
  </lh-form>
</template>

<script setup lang="ts">
import { ref } from 'vue'

const form = ref({ name: '', email: '' })
const formRef = ref()

const rules = {
  name: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
  email: [{ required: true, message: '请输入邮箱', trigger: 'blur' }],
}

const onSubmit = async () => {
  const ok = await formRef.value.validate()
  if (ok) {
    // 校验通过,提交
  }
}
</script>

Form Props ​

属性说明类型默认值
model表单数据对象(必填)Record<string, unknown>—
rules校验规则(键为 prop 名)Record<string, LhFormRule[]>—
labelPosition标签位置'left' | 'right' | 'top''right'
labelWidth标签宽度string | number—
inline行内布局booleanfalse
customClass自定义类名string—
sx快速布局属性LhSxProps—

Form Methods(通过 ref 调用) ​

ref 调用须在 onReady 之后

onLoad 阶段子组件尚未创建完毕,formRef.value 是 undefined。 提交按钮的点击事件天然在 onReady 之后,直接用没问题; 若要在页面初始化时调用,请放进 onReady。

方法说明返回
validate校验全部字段Promise<boolean>(全部通过为 true)
validateField校验单个字段Promise<boolean>

FormItem Props ​

属性说明类型默认值
prop字段键名(对应 model 的键与 rules 的键)string—
label标签文案string—
required必填标记(显示星号;实际校验由 rules 决定)booleanfalse
rules该字段专属规则(与 Form 的 rules 合并)LhFormRule[]>—
customClass自定义类名string—

与 Vue3 版的差异

  • 校验触发:小程序控件无 change 语义,各表单控件把 blur / input 事件映射为校验触发。
  • 表单提交:小程序表单语义不同,validate 返回 Promise<boolean> 供手动提交, 没有 web 端的 submit 事件拦截。