UNPKG

cloud-ui.vusion

Version:
196 lines (179 loc) 7.18 kB
前面的示例只是局部展示组件库表单验证体系的使用方法,达到的效果不一定符合实际情况。下面举几种比较合理的案例: 按照表单提交按钮在什么情况下可点击,可以分为以下几种常见且比较合理的情况:始终可点、必填项有内容可点、所有项内容正确时才可点。 ### 始终可点 表单提交按钮始终可点。 表现为表单中所有控件的所有行为必须进行提交验证,适当采用失焦和实时验证加以帮助。 ``` 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> ```