Skip to content

UseNaiveForm 表单管理

功能描述

UseNaiveForm 是一个功能强大的 Naive UI 表单管理工具,提供了完整的表单控制能力,包括表单验证、值管理、重置操作、清空操作等特性。它基于 Naive UI 的 Form 组件实现,为 Vue 应用提供了流畅的表单处理体验。

安装

bash
# 使用 pnpm
pnpm add @oiij/naive-ui

# 使用 npm
npm install @oiij/naive-ui

# 使用 yarn
yarn add @oiij/naive-ui

依赖

  • vue: ^3.0.0
  • naive-ui: ^2.0.0

基本使用

loading

API

useNaiveForm(formRef, value?, options?)

使用 Naive UI 表单管理。

参数

参数类型说明
formRefTemplateRef<FormInst>表单引用
valueT | Ref<T>表单值
optionsNaiveFormOptions<T>配置选项

NaiveFormOptions

选项类型说明
rulesNaiveFormRules<T>表单校验规则
clearRulesNaiveFormClearRules清空规则

返回值

属性类型说明
formRefRef<FormInst | null>表单引用
formValueRef<T>表单值
formRulesRef<NaiveFormRules<T>>表单校验规则
formPropsobject表单 props
setValue(value)Function设置表单值
validate()Function验证表单
resetValidation()Function重置验证
resetForm()Function重置表单
reset()Function重置
clear()Function清空
onValidated(callback)Function验证成功事件

类型定义

ts
export type NaiveFormClearRules = {
  string?: string | null
  number?: number | null
  boolean?: boolean | null
}

export type NaiveFormRules<T> = Partial<Record<keyof T, FormRules | FormItemRule | FormItemRule[]>>

export type NaiveFormOptions<T> = {
  /**
   * 表单校验规则
   */
  rules?: NaiveFormRules<T> | Ref<NaiveFormRules<T>>
  /**
   * 清空规则
   */
  clearRules?: NaiveFormClearRules
}

export type NaiveFormReturns<T> = {
  formRef: Ref<FormInst | null>
  formValue: Ref<T>
  formRules: Ref<NaiveFormRules<T>>
  formProps: { model: T, rules: NaiveFormRules<T> }
  setValue: (value: Partial<T>) => void
  validate: () => Promise<{ warnings?: ValidateError[][] }>
  resetValidation: () => void
  resetForm: () => void
  reset: () => void
  clear: () => void
  onValidated: (callback: (value: T) => void) => void
}

使用示例

基础用法

vue
<script setup>
import { useNaiveForm } from '@oiij/naive-ui'
import { ref, useTemplateRef } from 'vue'

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

const { formRef, formProps, validate, resetForm } = useNaiveForm(
  useTemplateRef('form'),
  formValue
)

async function handleSubmit() {
  const { warnings } = await validate()
  if (!warnings) {
    console.log('提交:', formValue.value)
  }
}
</script>

<template>
  <n-form ref="form" v-bind="formProps">
    <n-form-item label="姓名" path="name">
      <n-input v-model:value="formValue.name" />
    </n-form-item>
    <n-form-item label="邮箱" path="email">
      <n-input v-model:value="formValue.email" />
    </n-form-item>
  </n-form>
  <button @click="handleSubmit">
    提交
  </button>
</template>

带校验规则

vue
<script setup>
import { useNaiveForm } from '@oiij/naive-ui'
import { ref, useTemplateRef } from 'vue'

const formValue = ref({
  name: '',
  age: null
})

const rules = {
  name: { required: true, message: '请输入姓名' },
  age: { type: 'number', required: true, message: '请输入年龄' }
}

const { formRef, formProps, validate } = useNaiveForm(
  useTemplateRef('form'),
  formValue,
  { rules }
)
</script>

<template>
  <n-form ref="form" v-bind="formProps">
    <n-form-item label="姓名" path="name">
      <n-input v-model:value="formValue.name" />
    </n-form-item>
    <n-form-item label="年龄" path="age">
      <n-input-number v-model:value="formValue.age" />
    </n-form-item>
  </n-form>
  <button @click="validate">
    验证
  </button>
</template>