> 文档中心 > Vue常见页面(管理+详情+编辑+新增)八、表单规则校验(ref、model、rules、prop)和重置功能

Vue常见页面(管理+详情+编辑+新增)八、表单规则校验(ref、model、rules、prop)和重置功能


Vue常见页面(管理+详情+编辑+新增)八、表单规则校验(ref、model、rules、prop)和重置功能

规则校验

背景

Vue常见页面(管理+详情+编辑+新增)八、表单规则校验(ref、model、rules、prop)和重置功能
如图所示,我们需要将红框内的内容限定为必填

表单

               <el-form  ref="commitForm" :rules="rules" :model="projectdetail" label-width="120px">       <el-form-item label="项目名称" prop="project_name">    <el-select  v-model="project" @change="changeProgram" placeholder="请选择项目名称">      <el-option   v-for="(item, index) in options"   :key="item.project_id"   :label="item.project_name"   :value="`${item.project_id}-${index}`"      ></el-option>  </el-select>     </el-form-item>     <el-form-item label="用户组" >  <span>{{projectInfo.group_list}}</span>     </el-form-item>     <el-form-item label="服务名" >    <el-input v-model="projectdetail.service"></el-input>     </el-form-item>     <el-form-item label="提测内容" prop="content">  <el-input   type="textarea"   placeholder="请输入内容"   v-model="projectdetail.content"  maxlength="30"  show-word-limit  >  </el-input>     </el-form-item>  <el-form-item label="影响范围" prop="influence">  <el-input   type="textarea"   placeholder="请输入内容"   v-model="projectdetail.influence"  maxlength="30"  show-word-limit  >  </el-input>     </el-form-item>     <el-form-item label="wiki方案说明" prop="wiki">  <el-input v-model="projectdetail.wiki"></el-input>     </el-form-item>     <el-form-item label="项目研发负责人">  <span>{{projectInfo.main_rd_name}}</span>     </el-form-item>     <el-form-item label="项目测试负责人">  <span>{{projectInfo.main_qc_name}}</span>     </el-form-item>     <el-form-item label="代码review人" prop="reviewer_id">    <el-select v-model="reviewer" @change="changeReview" placeholder="请选择代码review人">      <el-option   v-for="(item, index) in users"   :key="item.user_id"   :label="item.real_name"   :value="`${item.user_id}-${index}`"      ></el-option>  </el-select>     </el-form-item>     <el-form-item label="提测分支" prop="branch">  <el-input v-model="projectdetail.branch"></el-input>     </el-form-item> </el-form>

参数

data

  // 表单提交信息  projectdetail:{      project_id:'',      project_name:'',      group_id:'',      group_name:'',      service:'',      content:'',      influence:'',      wiki:'',      main_rd_id:'',      main_qc_id:'',      reviewer_id:'',      branch:'',      apollo_desc:'',      database_desc:'',      interface_desc:'',      xxl_desc:'',      redis_desc:'',      mq_desc:''  }
rules:{      project_name:[   {required:true,message:'请选择项目名称',trigger:'change'}   ],      content:[   {required:true,message:'请输入体测内容',trigger:'blur'}      ],      influence:[   {required:true,message:'请输入影响范围',trigger:'blur'}      ],      wiki:[   {required:true,message:'请输入wiki方案说明',trigger:'blur'}      ],      reviewer_id:[   {required:true,message:'请选择代码review人',trigger:'change'}      ],      branch:[   {required:true,message:'请输入提测分支',trigger:'blur'}      ],  }

页面展示效果

发现在我们校验的地方已经展示出了红色星号
Vue常见页面(管理+详情+编辑+新增)八、表单规则校验(ref、model、rules、prop)和重置功能

提交按钮的校验

上面的只是在页面上展示,而已,并没有在提交时候做校验,那我们拿来element-ui的原话
Vue常见页面(管理+详情+编辑+新增)八、表单规则校验(ref、model、rules、prop)和重置功能

回调函数的方式

     <el-form-item>  <el-button type="success" plain @click="save">保存</el-button>     </el-form-item>

methods

     save() {  // 在提交的时候我们需要校验,到底有没有按照规则填写,this.$refs.commitForm这个实例就有表单中参数的规则校验结果,validate是实例的一个方法,在回调函数中有参数valid,如果全部符合rules的规则,则为true,反之为false  // 还有一个参数就是到底哪些没有符合条件,也会返回出来  this.$refs.commitForm.validate((valid,error)=>{      console.log(error)      console.log("规则校验结果="+valid)      if(!valid){   // 如果valid部位true,则弹窗提示   this.$message.error("内容填写有误");      }  })  console.log(this.projectdetail)  //在验证完参数的合法性之后,再去请求接口  insertTestSheet(this.projectdetail).then(response=>{      console.log(response.result)  })     }

提交按钮的展示效果

点击提交按钮message提示弹出
Vue常见页面(管理+详情+编辑+新增)八、表单规则校验(ref、model、rules、prop)和重置功能

我们再来看一下validate里的valid和error分别是啥
Vue常见页面(管理+详情+编辑+新增)八、表单规则校验(ref、model、rules、prop)和重置功能

不传入回调函数的方式

     save() {  // 在提交的时候我们需要校验,到底有没有按照规则填写,this.$refs.commitForm这个实例就有表单中参数的规则校验结果  //.then()代表如果所有的验证都通过了,.catch()代表有的验证没有通过  this.$refs.commitForm.validate()  .then((a)=>{      console.log(a)  })  .catch((b)=>{      console.log(b)  })     }

提交按钮的展示效果

没有通过验证,走到了catch分支,返回了false
Vue常见页面(管理+详情+编辑+新增)八、表单规则校验(ref、model、rules、prop)和重置功能

通过了验证,走到了then分支,返回了true
Vue常见页面(管理+详情+编辑+新增)八、表单规则校验(ref、model、rules、prop)和重置功能
个人推荐还是使用带回调函数的,因为回调函数里会告诉你哪些参数是不合要求的,你可以将其打印到message提醒用户,更有针对性

重置功能

背景

点击重置按钮,清空输入框
Vue常见页面(管理+详情+编辑+新增)八、表单规则校验(ref、model、rules、prop)和重置功能
Vue常见页面(管理+详情+编辑+新增)八、表单规则校验(ref、model、rules、prop)和重置功能

表单

        <el-form :inline="true" id="form-one" class="formonr" ref="queryForm" :model="queryParam"> <el-row type="flex" justify="left">     <el-col :span="20" id="colone">      <el-form-item label="项目名称" prop="test_name">   <el-input placeholder="模糊搜索" v-model="queryParam.test_name"></el-input>      </el-form-item>      <el-form-item label="测试单状态" prop="status_yn">            <el-select v-model="value" placeholder="请选择" clearable @change="changeStatus">   <el-option   v-for="(item, index) in options"   :key="item.status_yn"   :label="item.status_name"   :value="`${item.status_yn}-${index}`">   </el-option>    </el-select>      </el-form-item><el-form-item>   <el-button type="primary"  @click="querySheet">查询</el-button></el-form-item><el-form-item>     <el-button type="primary"  @click="$refs.queryForm.resetFields()">重置</el-button></el-form-item>      <el-form-item>   <el-button type="primary" @click="sheetInsert">新建</el-button></el-form-item>    </el-col> </el-row>    </el-form> 

data

 queryParam:{   pageNo:1,   pageSize:10,   test_name: "",   status_yn: "",   reviewer: "" }, value:""