赞
踩
以element官网的form表单的-动态增减表单项为例讲解表单验证规则
动态的功能就是v-model配合push + v-for 便利来实现的
我们需要熟知2个知识点prop表单验证需要跟v-model绑定的值是一样的,
如果是一个数组便利的表单,那就需要绑定这个数组每一项v-model值。
- <template>
- <div>
- <el-form
- :model="dynamicValidateForm"
- ref="dynamicValidateForm"
- label-width="100px"
- class="demo-dynamic"
- >
- <el-form-item
- prop="email"
- label="邮箱"
- :rules="[
- { required: true, message: '请输入邮箱地址', trigger: 'blur' },
- {
- type: 'email',
- message: '请输入正确的邮箱地址',
- trigger: ['blur', 'change'],
- },
- ]"
- >
- <el-input v-model="dynamicValidateForm.email"></el-input>
- </el-form-item>
- <el-form-item
- v-for="(domain, index) in dynamicValidateForm.domains"
- :label="'域名' + index"
- :key="domain.key"
- :prop="'domains.' + index + '.value'"
- :rules="{
- required: true,
- message: '域名不能为空',
- trigger: 'blur',
- }"
- >
- <el-input v-model="domain.value"></el-input
- ><el-button @click.prevent="removeDomain(domain)">删除</el-button>
- </el-form-item>
- <el-form-item>
- <el-button type="primary" @click="submitForm()">提交</el-button>
- <el-button @click="addDomain">新增域名</el-button>
- <el-button @click="resetForm()">重置</el-button>
- </el-form-item>
- </el-form>
- </div>
- </template>
- <script>
- export default {
- data() {
- return {
- dynamicValidateForm: {
- domains: [
- {
- value: "",
- },
- ],
- email: "",
- },
- };
- },
- methods: {
- submitForm() {
- this.$refs.dynamicValidateForm.validate((valid) => {
- if (valid) {
- alert("submit!");
- } else {
- console.log("error submit!!");
- return false;
- }
- });
- },
- resetForm() {
- this.$refs.dynamicValidateForm.resetFields();
- },
- removeDomain(item) {
- var index = this.dynamicValidateForm.domains.indexOf(item);
- if (index !== -1) {
- this.dynamicValidateForm.domains.splice(index, 1);
- }
- },
- addDomain() {
- this.dynamicValidateForm.domains.push({
- value: "",
- key: Date.now(),
- });
- },
- },
- };
- </script>
总结:
经过这一趟流程下来相信你也对 vue- form动态表单验证规则-表单验证 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!
什么不足的地方请大家指出谢谢 -- 風过无痕
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。