详解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 相关文章推荐
新浪的图片新闻效果
Jan 13 Javascript
JQquery的一些使用心得分享
Aug 01 Javascript
javascript中JSON.parse()与eval()解析json的区别
May 19 Javascript
javascript实现去除HTML标签的方法
Dec 26 Javascript
Javascript 实现全屏滚动实例代码
Dec 31 Javascript
详解Javascript获取缓存和清除缓存API
May 25 Javascript
Bootstrap实现的表格合并单元格示例
Feb 06 Javascript
详解从Vue-router到html5的pushState
Jul 21 Javascript
js数据类型检测总结
Aug 05 Javascript
详解a标签添加onclick事件的几种方式
Mar 29 Javascript
Vue组件化开发之通用型弹出框的实现
Feb 28 Javascript
Javascript前端下载后台传来的文件流代码实例
Aug 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
基于PHP文件操作的详解
2013/06/05 PHP
PHP模块memcached使用指南
2014/12/08 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
php探针不显示内存解决方法
2019/09/17 PHP
javascript客户端解决方案 缓存提供程序
2010/07/14 Javascript
JavaScript的漂亮的代码片段
2013/06/05 Javascript
jQuery中noconflict函数的实现原理分解
2015/02/03 Javascript
js获取及判断键盘按键的方法
2015/12/01 Javascript
JavaScript实现下拉菜单的显示和隐藏
2016/01/05 Javascript
js实现可键盘控制的简单抽奖程序
2016/07/13 Javascript
全面解析JavaScript中“&amp;&amp;”和“||”操作符(总结篇)
2016/07/18 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
js获取浏览器的各种属性
2017/04/27 Javascript
get  post jsonp三种数据交互形式实例详解
2017/08/25 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
使用python调用zxing库生成二维码图片详解
2017/01/10 Python
python类的继承实例详解
2017/03/30 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
2018/03/13 Python
python web基础之加载静态文件实例
2018/03/20 Python
Python引用计数操作示例
2018/08/23 Python
在python中用url_for构造URL的方法
2019/07/25 Python
Python爬虫基于lxml解决数据编码乱码问题
2020/07/31 Python
CSS3实现莲花绽放的动画效果
2020/11/06 HTML / CSS
CheapTickets泰国:廉价航班,查看促销价格并预订机票
2019/12/28 全球购物
Linux上比较文件的命令都有哪些
2012/02/24 面试题
自考自我鉴定范文
2013/10/30 职场文书
商场消防管理制度
2014/01/12 职场文书
小学生新学期寄语
2014/01/19 职场文书
信息专业毕业生五年职业规划参考
2014/02/06 职场文书
卖房协议书
2014/04/11 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
大学感恩节活动策划方案
2014/10/11 职场文书
委托公证书格式
2015/01/26 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
加薪申请报告范本
2015/05/15 职场文书
美容院管理规章制度
2015/08/05 职场文书