cloud-ui.vusion
Version:
Vusion Cloud UI
196 lines (179 loc) • 7.18 kB
Markdown
前面的示例只是局部展示组件库表单验证体系的使用方法,达到的效果不一定符合实际情况。下面举几种比较合理的案例:
按照表单提交按钮在什么情况下可点击,可以分为以下几种常见且比较合理的情况:始终可点、必填项有内容可点、所有项内容正确时才可点。
### 始终可点
表单提交按钮始终可点。
表现为表单中所有控件的所有行为必须进行提交验证,适当采用失焦和实时验证加以帮助。
``` vue
<template>
<u-form ref="form" gap="large" :rules="rules">
<u-form-item label="用户名" name="username" >
<u-input size="huge" v-model="model.username" maxlength="12" placeholder="4~12个字符"></u-input>
</u-form-item>
<u-form-item label="邮箱" name="email" field-size="full">
<u-input size="huge" v-model="model.email" maxlength="24" placeholder="请输入邮箱"></u-input>
</u-form-item>
<u-form-item label="手机号码" name="phone" field-size="full">
<u-input size="huge" v-model="model.phone" maxlength="11" placeholder="请输入手机号码"></u-input>
</u-form-item>
<u-form-item field-size="full">
<u-button color="primary" @click="submit()">提交</u-button>
</u-form-item>
</u-form>
</template>
<script>
export default {
data() {
return {
model: {
username: '',
email: '',
phone: '',
},
rules: {
username: [
{ type: 'string', required: true, trigger: 'blur', message: '请输入用户名' },
{ type: 'string', min: 4, max: 12, trigger: 'blur', message: '请输入4~12个字符' },
],
email: [
{ type: 'string', required: true, trigger: 'blur', message: '请输入邮箱' },
{ type: 'email', trigger: 'blur', message: '邮箱格式不正确' },
],
phone: [
{ type: 'string', pattern: /^\d{11}$/, trigger: 'blur', message: '手机号码格式不正确' },
],
},
};
},
methods: {
submit() {
this.$refs.form.validate()
.then(() => alert('提交成功'))
.catch(() => {});
},
},
};
</script>
```
### 必填项有内容可点
当表单中所有必填项有内容时,表单提交按钮才可点。
表现为根据表单中必填项是否为空,使用计算属性来实时判断提交按钮是否可点。并且在这种情况下,通常采用三种验证相结合的方式。
``` vue
<template>
<u-form ref="form" gap="large" :rules="rules">
<u-form-item label="用户名" name="username">
<u-input size="huge" v-model="model.username" maxlength="12" placeholder="4~12个字符"></u-input>
</u-form-item>
<u-form-item label="邮箱" name="email">
<u-input size="huge" v-model="model.email" maxlength="24" placeholder="请输入邮箱"></u-input>
</u-form-item>
<u-form-item label="手机号码" name="phone">
<u-input size="huge" v-model="model.phone" maxlength="11" placeholder="请输入手机号码"></u-input>
</u-form-item>
<u-form-item>
<u-button color="primary" :disabled="!canSubmit" @click="submit()">提交</u-button>
</u-form-item>
</u-form>
</template>
<script>
export default {
data() {
return {
model: {
username: '',
email: '',
phone: '',
},
rules: {
username: [
{ type: 'string', required: true, trigger: 'blur', message: '请输入用户名' },
{ type: 'string', min: 4, max: 12, trigger: 'blur', message: '请输入4~12个字符' },
],
email: [
{ type: 'string', required: true, trigger: 'blur', message: '请输入邮箱' },
{ type: 'email', trigger: 'blur', message: '邮箱格式不正确' },
],
phone: [
{ type: 'string', pattern: /^\d{11}$/, trigger: 'blur', message: '手机号码格式不正确' },
],
},
};
},
computed: {
canSubmit() {
return this.model.username && this.model.email;
},
},
methods: {
submit() {
this.$refs.form.validate()
.then(() => alert('提交成功'))
.catch(() => {});
},
},
};
</script>
```
### 所有项内容正确可点
当表单中所有项内容均符合要求时,表单提交按钮才可点。
表现为根据每个表单控件的验证结果,使用计算属性来实时判断提交按钮是否可点。这种情况下,一般就不需要进行提交验证了。
``` vue
<template>
<u-form ref="form" gap="large" :rules="rules" @validate="canSubmit = $event.valid">
<u-form-item label="用户名" name="username">
<u-input size="huge" v-model="model.username" maxlength="12" placeholder="4~12个字符"></u-input>
</u-form-item>
<u-form-item label="邮箱" name="email">
<u-input size="huge" v-model="model.email" maxlength="24" placeholder="请输入邮箱"></u-input>
</u-form-item>
<u-form-item label="手机号码" name="phone">
<u-input size="huge" v-model="model.phone" maxlength="11" placeholder="请输入手机号码"></u-input>
</u-form-item>
<u-form-item>
<u-button color="primary" :disabled="!canSubmit" @click="submit()">提交</u-button>
</u-form-item>
</u-form>
</template>
<script>
export default {
data() {
return {
canSubmit: false,
model: {
username: '',
email: '',
phone: '',
},
rules: {
username: [
{ type: 'string', required: true, trigger: 'input+blur', message: '请输入用户名' },
{ type: 'string', min: 4, max: 12, trigger: 'input+blur', message: '请输入4~12个字符' },
],
email: [
{ type: 'string', required: true, trigger: 'input+blur', message: '请输入邮箱' },
{ type: 'email', trigger: 'input+blur', message: '邮箱格式不正确' },
],
phone: [
{ type: 'string', pattern: /^\d{11}$/, trigger: 'input+blur', message: '手机号码格式不正确' },
],
},
};
},
mounted() {
// 必须初始化时或在获取数据到时安静验证一次
this.$refs.form.validate(true)
.catch(() => {});
// 在获取数据到时如下
// this.getData().then(...)
// .then(() => this.$refs.form.validate(true))
// .catch(() => {});
},
methods: {
submit() {
this.$refs.form.validate()
.then(() => alert('提交成功'))
.catch(() => {});
},
},
};
</script>
```