详解element-ui设置下拉选择切换必填和非必填


Posted in Javascript onJune 17, 2019

➢ 需求

默认都是必选

下拉选择的时候

选择必填,活动名称为必填,需要校验和显示*

选择非必填,活动名称不做校验,隐藏*

详解element-ui设置下拉选择切换必填和非必填

➢ 初始校验规则

经测试,网上其他的方式都没有实现需求,动态切换rules中的required没有作用

因为按照以下的写法的话,element-ui在组件初始化后校验规则就定型了,切换也没用

rules: {
  name: [
    { required: true, message: "请输入名称", trigger: "blur" }
  ],
  region: [
    { required: true, message: "请选择类型", trigger: "blur" }
  ]
}

➢ 解决方案

第一步:

去除rules中需要动态校验的字段规则

去除name

rules: {
  region: [
    { required: true, message: "请选择类型", trigger: "blur" }
  ]
}

第二步:

在字段为nameform-item上,添加required属性

下面代码isHaveTo为新字段,根据下拉框选择的值来决定是为true还是false

<el-form-item label="活动名称" prop="name" :required="isHaveTo">
  <el-input v-model="ruleForm.name"></el-input>
</el-form-item>

第三步:

计算属性,新增字段isHaveTo

下拉选择框非必须是为1,其他都是必填,包括默认

<el-form-item label="活动名称" prop="name" :required="isHaveTo">
  <el-input v-model="ruleForm.name"></el-input>
</el-form-item>

效果如图:

下拉切换,*号显隐,提交时也有不同规则

注意,新的问题来了

在选择必填时,没有了之前的错误提示文字,而是element自带的提示

详解element-ui设置下拉选择切换必填和非必填

第四步:

设置错误提示

使用自定义函数控制流程

name字段重新加回去rules

注意是函数{ validator: validateName }

rules: {
  name: [{ validator: validateName }],
  region: [
    { required: true, message: "请选择类型", trigger: "blur" }
  ]
}

然后设置函数validateName

可以看到,必填时按照我们设置的提示语提示,非必填时,校验通过

详解element-ui设置下拉选择切换必填和非必填

贴上代码

data() {
   // 验证活动名称的函数
   let validateName = (rule, value, callback) => {
     // 当活动名称为空值且为必填时,抛出错误,反之通过校验
     if (this.ruleForm.name === "" && this.isHaveTo) {
       callback(new Error("请输入活动名称"));
     } else {
       callback();
     }
   };
   return {
     ruleForm: {
       name: "",
       region: ""
     },
     rules: {
       name: [{ validator: validateName }],
       region: [
         { required: true, message: "请选择类型", trigger: "blur" }
       ]
     }
   };
 },

➢ 完整demo代码

demo使用vue-cli,引入element-ui

核心代码参考如下:

<template>
  <div>
    <el-form
      :model="ruleForm"
      :rules="rules"
      ref="ruleForm"
      label-width="100px"
      class="demo-ruleForm"
    >
      <el-form-item label="活动名称" prop="name" :required="isHaveTo">
        <el-input v-model="ruleForm.name"></el-input>
      </el-form-item>
      <el-form-item label="活动区域" prop="region">
        <el-select v-model="ruleForm.region" placeholder="请选择活动区域" style="width:100%">
          <el-option label="必填" value="0"></el-option>
          <el-option label="非必填" value="1"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
export default {
  name: "HelloWorld",
  data() {
    // 验证活动名称的函数
    let validateName = (rule, value, callback) => {
      // 当活动名称为空值且为必填时,抛出错误,反之通过校验
      if (this.ruleForm.name === "" && this.isHaveTo) {
        callback(new Error("请输入活动名称"));
      } else {
        callback();
      }
    };
    return {
      ruleForm: {
        name: "",
        region: ""
      },
      rules: {
        name: [{ validator: validateName }],
        region: [
          { required: true, message: "请选择类型", trigger: "blur" }
        ]
      }
    };
  },
  computed: {
    isHaveTo: function() {
      return this.ruleForm.region !== `1`;
    }
  },
  methods: {
    submitForm(formName) {
      this.$refs[formName].validate(valid => {
        if (valid) {
          console.log(`已提交表单`);
        } else {
          console.log("error submit!!");
          return false;
        }
      });
    }
  }
};
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS实现同时搜索百度和必应的方法
Jan 27 Javascript
js判断登录与否并确定跳转页面的方法
Jan 30 Javascript
JavaScript用select实现日期控件
Jul 17 Javascript
jQuery表单插件ajaxForm实例详解
Jan 17 Javascript
jquery中关于bind()方法的使用技巧分享
Mar 30 jQuery
Vue中计算属性computed的示例解读
Jul 26 Javascript
AngularJS中table表格基本操作示例
Oct 10 Javascript
JS+HTML+CSS实现轮播效果
Nov 28 Javascript
React key值的作用和使用详解
Aug 23 Javascript
js jquery 获取某一元素到浏览器顶端的距离实现方法
Sep 05 jQuery
详解vscode中vue代码颜色插件
Oct 11 Javascript
微信小程序实现弹幕墙(祝福墙)
Nov 18 Javascript
JS实现的字符串数组去重功能小结
Jun 17 #Javascript
JavaScript静态作用域和动态作用域实例详解
Jun 17 #Javascript
深入解析koa之中间件流程控制
Jun 17 #Javascript
深入解读Node.js中的koa源码
Jun 17 #Javascript
学习RxJS之JavaScript框架Cycle.js
Jun 17 #Javascript
javascript系统时间设置操作示例
Jun 17 #Javascript
深入学习TypeScript 、React、 Redux和Ant-Design的最佳实践
Jun 17 #Javascript
You might like
SONY ICF-F10中波修复记
2021/03/02 无线电
php中引用符号(&amp;)的使用详解
2013/11/13 PHP
使用原生js写的一个简单slider
2014/04/29 Javascript
JS+CSS实现闪烁字体效果代码
2016/04/05 Javascript
js仿拉勾网首页穿墙广告效果
2017/03/08 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
jQuery+Ajax实现用户名重名实时检测
2017/06/01 jQuery
基于JS实现web端录音与播放功能
2019/04/17 Javascript
node学习笔记之读写文件与开启第一个web服务器操作示例
2019/05/29 Javascript
JavaScript实现图片伪异步上传过程解析
2020/04/10 Javascript
详解VUE中的插值( Interpolation)语法
2020/10/18 Javascript
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
2018/02/18 Python
详谈在flask中使用jsonify和json.dumps的区别
2018/03/26 Python
对python 生成拼接xml报文的示例详解
2018/12/28 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
python socket 聊天室实例代码详解
2019/11/14 Python
Python3操作读写CSV文件使用包过程解析
2020/04/10 Python
详解Python多线程下的list
2020/07/03 Python
学习Python爬虫的几点建议
2020/08/05 Python
python实现简单的五子棋游戏
2020/09/01 Python
戴森英国官网:Dyson英国
2019/05/07 全球购物
Nasty Gal英国:美国女性服饰销售网站
2021/03/02 全球购物
京剧自荐信
2014/01/26 职场文书
《走一步再走一步》教学反思
2014/02/15 职场文书
领导失职检讨书
2014/02/24 职场文书
大学生励志演讲稿
2014/04/25 职场文书
指导教师推荐意见
2015/06/05 职场文书
2016新春团拜会致辞
2015/08/01 职场文书
六五普法学习心得体会
2016/01/21 职场文书
护士爱岗敬业心得体会
2016/01/25 职场文书
MySQL中几种插入和批量语句实例详解
2021/09/14 MySQL