发布于2021-11-20 17:10 阅读(1154) 评论(0) 点赞(20) 收藏(3)
这个功能为当一个下拉菜单选中某个值,确定另一个下拉框是否拥有校验规则
如图
此时活动区域未选择值,所以测试这个下拉菜单不需要有校验
此时活动区域选择区域一,测试拥有校验规则,非空校验
- <template>
- <div id="app">
- <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
- <el-form-item label="活动名称" prop="name">
- <el-input v-model="ruleForm.name"></el-input>
- </el-form-item>
- <el-form-item label="活动区域" prop="region">
- <el-select v-model="ruleForm.region" placeholder="请选择活动区域" @change="isRules(ruleForm.region)">
- <el-option label="区域一" value="1"></el-option>
- <el-option label="区域二" value="2"></el-option>
- </el-select>
- </el-form-item>
-
- <!-- 测试 -->
- <el-form-item label="测试" prop="test">
- <el-select v-model="ruleForm.test" placeholder="请选择活动区域">
- <el-option label="区域一" value="shanghai"></el-option>
- <el-option label="区域二" value="beijing"></el-option>
- </el-select>
- </el-form-item>
-
- <el-form-item label="活动时间" required>
- <el-col :span="11">
- <el-form-item prop="date1">
- <el-date-picker type="date" placeholder="选择日期" v-model="ruleForm.date1" style="width: 100%;"></el-date-picker>
- </el-form-item>
- </el-col>
- <el-col class="line" :span="2">-</el-col>
- <el-col :span="11">
- <el-form-item prop="date2">
- <el-time-picker placeholder="选择时间" v-model="ruleForm.date2" style="width: 100%;"></el-time-picker>
- </el-form-item>
- </el-col>
- </el-form-item>
- <el-form-item label="即时配送" prop="delivery">
- <el-switch v-model="ruleForm.delivery"></el-switch>
- </el-form-item>
- <el-form-item label="活动性质" prop="type">
- <el-checkbox-group v-model="ruleForm.type">
- <el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox>
- <el-checkbox label="地推活动" name="type"></el-checkbox>
- <el-checkbox label="线下主题活动" name="type"></el-checkbox>
- <el-checkbox label="单纯品牌曝光" name="type"></el-checkbox>
- </el-checkbox-group>
- </el-form-item>
- <el-form-item label="特殊资源" prop="resource">
- <el-radio-group v-model="ruleForm.resource">
- <el-radio label="线上品牌商赞助"></el-radio>
- <el-radio label="线下场地免费"></el-radio>
- </el-radio-group>
- </el-form-item>
- <el-form-item label="活动形式" prop="desc">
- <el-input type="textarea" v-model="ruleForm.desc"></el-input>
- </el-form-item>
- <el-form-item>
- <el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
- <el-button @click="resetForm('ruleForm')">重置</el-button>
- </el-form-item>
- </el-form>
- </div>
- </template>
-
- <script>
- export default {
- data() {
- return {
- ruleForm: {
- name: '',
- region: '',
- date1: '',
- date2: '',
- delivery: false,
- type: [],
- resource: '',
- desc: ''
- },
- rules: {
- name: [
- { required: true, message: '请输入活动名称', trigger: 'blur' },
- { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
- ],
- region: [
- { required: true, message: '请选择活动区域', trigger: 'change' }
- ],
- date1: [
- { type: 'date', required: true, message: '请选择日期', trigger: 'change' }
- ],
- date2: [
- { type: 'date', required: true, message: '请选择时间', trigger: 'change' }
- ],
- type: [
- { type: 'array', required: true, message: '请至少选择一个活动性质', trigger: 'change' }
- ],
- resource: [
- { required: true, message: '请选择活动资源', trigger: 'change' }
- ],
- desc: [
- { required: true, message: '请填写活动形式', trigger: 'blur' }
- ]
- }
- };
- },
- methods: {
- isRules(val) {
- if(val === '1') {
- this.rules.test = [
- { required: true, message: '请选择测试', trigger: 'change' }
- ]
- this.rules = JSON.parse(JSON.stringify(this.rules))
- } else {
- this.rules.test = null
- this.rules = JSON.parse(JSON.stringify(this.rules))
- }
- },
- submitForm(formName) {
- this.$refs[formName].validate((valid) => {
- if (valid) {
- alert('submit!');
- } else {
- console.log('error submit!!');
- return false;
- }
- });
- },
- resetForm(formName) {
- this.$refs[formName].resetFields();
- }
- }
- }
- </script>
想要动态添加校验规则
- this.rules.test = [
-
- { required: true, message: '请选择测试', trigger: 'change' }
-
- ]
-
- this.rules = JSON.parse(JSON.stringify(this.rules))
this.rules = JSON.parse(JSON.stringify(this.rules))必须这样或者用扩展运算符进行重新赋值,才能添加到规则里,并且展示出来,直接将校验规则添加进去,是不会被直接渲染出来的
但是这么写,你会发现,当选完区域一后,会直接触发类似于兜底验证
如图
会把其他的校验都给触发了,所以可能你会想到在这些代码后直接使用element-UI自带的this.$refs[formName].clearValidate();
但是你会发现并不起效果
所以这时候就需要vue中的$nextTick上场了
- this.$nextTick(() => {
- this.$refs.ruleForm.clearValidate();
- })
$nextTick大家应该都理解这个的作用, 大概就是内的代码会在当下一次DOM循环的时候执行
此时就解决了这个问题
原文链接:https://blog.csdn.net/m0_57482145/article/details/121396624
作者:Jjxj
链接:http://www.qianduanheidong.com/blog/article/237568/2867468816690f9255a6/
来源:前端黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 前端黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-3
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!