更新记录

1.0.3(2025-04-10) 下载此版本

修改下边框包含住提示文字

1.0.2(2025-03-14) 下载此版本

1.修改默认标题宽度为100rpx

1.0.1(2025-03-14) 下载此版本

更新使用文档

查看更多

平台兼容性

Vue2 Vue3
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
app-vue × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序 鸿蒙元服务
× × × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari

Form 表单

组件名: xt-form

适配情况需自行尝试,开发时只测试了H5、APP、微信小程序

安装方式

本组件符合 easycom 规范,HBuilderX 3.1.0 起,只需将本组件导入项目,在页面 template 中即可直接使用,无需在页面中 import 和注册 components

注意事项

如何阻止事件冒泡

vue2:在组件上直接使用@click.native.stop,如:<xt-icon @click.native.stop='click'></xt-icon>;

vue3:由于 vue3 没有native修饰符,所以不能直接在组件上使用.stop修饰符,只能嵌套一层view标签,在外层view上添加@click.stop阻止冒泡

基本用法

<template>
    <view class="xt">
        <xt-form ref="form" :model="form" :rules='rules'>
            <xt-form-item label="姓名" prop="name" required>
                <xt-input v-model="form.name" placeholder="请输入姓名"></xt-input>
            </xt-form-item>
            <xt-form-item label="性别" prop="sex">
                <xt-radio v-model="form.sex">
                    <xt-radio-item label="男" value="1"></xt-radio-item>
                    <xt-radio-item label="女" value="0"></xt-radio-item>
                </xt-radio>
            </xt-form-item>
            <xt-form-item label="简介" prop="brief">
                <xt-textarea v-model="form.brief" placeholder="请输入简介" count></xt-textarea>
            </xt-form-item>
        </xt-form>
        <xt-button @click="log">提交</xt-button>
        <xt-button @click="reset">重置</xt-button>
        <xt-button @click="clearValidate">清空校验</xt-button>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                form: {
                    name: '姓名',
                    sex: '1',
                    brief: '简介'
                },
                rules: {
                    name: {
                        type: 'string',
                        required: true,
                        max: 10,
                        message: '姓名不能超过10个字'
                    },
                    sex: {
                        type: 'string',
                        message: '请选择性别',
                    },
                    brief: {
                        pattern: /^[0-9a-zA-Z]*$/g,
                        transform(value) {
                            return String(value);
                        },
                        message: '只能包含字母或数字'
                    }
                }
            }
        },
        methods: {
            // 提交
            log() {
                this.$refs.form.validate().then(res => {
                    console.log('通过')
                })
            },
            // 重置
            reset() {
                this.$refs.form.resetFields()
            },
            // 清空校验
            clearValidate() {
                this.$refs.form.clearValidate()
            }
        }
    }
</script>
<style lang="scss">
    .xt {
        padding: 0 20rpx;
        padding-top: 50rpx;
        display: flex;
        flex-direction: column;
        gap: 15rpx;
    }
</style>

xt-form API

属性 类型 说明 默认值
model Object 需要验证字段的集合
labelWidth String|Number 提示文字的宽度 100rpx
labelAlign String label 字体的位置 left(可选 right``center``top)
labelStyle Object label 的样式
borderBottom Boolean 是否显示表单项的下划线边框 false
gap String 表单项之间的间距 20rpx
rules Object 校验规则
disabled Boolean 是否禁用整个表单 false

xt-form-item API

属性 类型 说明 默认值
label String 表单项标题
prop String 表单项字段
labelWidth String|Number 表单项标题宽度,优先级大于父组件
required Boolean 是否显示 * 号 false
disabled Boolean 是否禁用表单项 false

Events(通过ref调用)

事件名 描述 参数
setRules 手动设置校验规则 Function(rules)
validate 对整个表单进行校验
validateField 对某个表单项进行校验 Function(value,Function(err))
clearValidate 清空校验结果
resetFields 重置表单

Rules校验规则

组件使用了 async-validator 验证字段,这里对常用的进行讲解,更多请查看官网的文档说明

  • trigger{String | Array}: 触发校验方式
    • change: 字段发生变化时触发
    • blur: 子组件失去焦点触发
    • 需要搭配 xtUI 才有效
  • type{String}: 内置的校验规则
    • string:必须是 string 类型,默认类型
    • number:必须是 number 类型
    • boolean:必须是 boolean 类型
    • method:必须是 function 类型
    • regexp:必须是 regexp 类型,这里的正则,指的是判断字段的内容是否一个正则表达式,而不是用这个正则去匹配字段值
    • integer:必须是整数类型
    • float:必须是浮点数类型
    • array:必须是 array 类型
    • object:必须是 object 类型
    • enum:必须出现在 enmu 指定的值中
    • date:必须是 date 类型
    • url:必须是 url 类型
    • hex:必须是 16 进制类型
    • email:必须是 email 类型
    • any:任意类型
  • required{Boolean}: 是否必填
  • pattern: 正则表达式,如 /^[0-9a-zA-Z]*$/g 只能包含数字字母
  • min: 最小值,如果字段类型为字符串和数组,会取字符串长度与数组长度(length)与min比较,如果字段是数值,则直接与min比较。
  • max: 最大值,与min同理
  • len:指定长度,规则同min,优先级高于minmax
  • enum{Array} 指定的值,配合 type: 'enum' 使用
  • whitespace{Boolean}
    如果字段值内容都为空格,默认无法通过required: true校验,如果要允许通过,需要将此参数设置为true
  • transform{Function},校验前对值进行转换,函数的参数为当前值,返回值为改变后的值,参数如如下:
    • value:当前校验字段的值
  • message校验不通过时的提示信息
  • validator{Function}:自定义同步校验函数,参数如下:
    • rule:当前校验字段在 rules 中所对应的校验规则
    • value:当前校验字段的值
    • callback:校验完成时的回调,一般无需执行callback,返回true(校验通过)或者false(校验失败)即可
  • asyncValidator{Function}:自定义异步校验函数,参数如下:
    • rule:当前校验字段在 rules 中所对应的校验规则
    • value:当前校验字段的值
    • callback:校验完成时的回调,执行完异步操作(比如向后端请求数据验证),如果不通过,需要callback(new Error('提示错误信息')),如果校验通过,执行callback()即可

Rules示例

const rules = {
  name:{
    // 字段类型
    type:'String',
    // 必填
            required: true,
    // 提示语
            message: '请输入姓名',
    // 变化就触发
            trigger: 'change'
  },
    age: {
            message: '请输入年龄',
      // 失去焦点触发
            trigger: 'blur'
        },
  phone:[
            {
                required: true,
                message: '请输入手机号',
                trigger: ['change', 'blur']
            },
            {
                // 自定义验证函数
                validator: (rule, value, callback) => {
                    // 返回true表示校验通过,返回false表示不通过
                    return /^1([3589]\d|4[5-9]|6[1-2,4-7]|7[0-8])\d{8}$/.test(value);
                },
                message: '手机号码不正确',
                // 触发器可同时用blur和change
                trigger: ['change', 'blur']
            }
        ]
}

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问