详解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 相关文章推荐
关于html+ashx开发中几个问题的解决方法
Jul 18 Javascript
结合JQ1.9通过js正则判断各种浏览器版本的方法
Dec 30 Javascript
运用jQuery定时器的原理实现banner图片切换
Oct 22 Javascript
javascript获取当前鼠标坐标的方法
Jan 10 Javascript
js函数内变量的作用域分析
Jan 12 Javascript
使用AngularJS实现可伸缩的页面切换的方法
Jun 19 Javascript
浅谈javascript中return语句
Jul 15 Javascript
jquery图片滚动放大代码分享(1)
Aug 25 Javascript
JavaScript缓冲运动实现方法(2则示例)
Jan 08 Javascript
Jquery跨浏览器文本复制插件Zero Clipboard的使用方法
Feb 28 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
Aug 31 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
Sep 18 jQuery
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
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
php5新改动之短标记启用方法
2008/09/11 PHP
php准确获取文件MIME类型的方法
2015/06/17 PHP
修复ShopNC使用QQ 互联时提示100010 错误
2015/11/08 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
PHP实现长轮询消息实时推送功能代码实例讲解
2021/02/26 PHP
[原创]静态页面也可以实现预览 列表不同的显示方式
2006/10/14 Javascript
json 入门基础教程 推荐
2009/10/31 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
整理Javascript基础入门学习笔记
2015/11/29 Javascript
基于Node.js实现压缩和解压缩的方法
2018/02/13 Javascript
Node.js应用设置安全的沙箱环境
2018/04/23 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
2019/05/22 Javascript
Weex开发之地图篇的具体使用
2019/10/16 Javascript
js HTML DOM EventListener功能与用法实例分析
2020/04/27 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
2020/04/28 Javascript
在antd Table中插入可编辑的单元格实例
2020/10/28 Javascript
Vue router安装及使用方法解析
2020/12/02 Vue.js
vue实现禁止浏览器记住密码功能的示例代码
2021/02/03 Vue.js
python实现堆栈与队列的方法
2015/01/15 Python
PyQt5每天必学之拖放事件
2020/08/27 Python
python3学习之Splash的安装与实例教程
2018/07/09 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
详解Python3中的 input() 函数
2020/03/18 Python
python实现凯撒密码、凯撒加解密算法
2020/06/11 Python
Burberry英国官网:英国标志性奢侈品牌
2017/03/29 全球购物
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
清明节网上祭英烈活动总结
2014/04/30 职场文书
十八大演讲稿
2014/05/22 职场文书
护理医院见习报告
2014/11/03 职场文书
车间班组长竞聘书
2015/09/15 职场文书
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript