详解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 相关文章推荐
某页码显示的helper 少量调整,另附js版
Sep 12 Javascript
jquery 单引号和双引号的区别及使用注意
Jul 31 Javascript
EasyUi datagrid 实现表格分页
Feb 10 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
Dec 31 Javascript
分类解析jQuery选择器
Nov 23 Javascript
JavaScript实现大图轮播效果
Jan 11 Javascript
jQuery动态产生select option下拉列表
Mar 15 Javascript
jQuery 实现图片的依次加载图片功能
Jul 06 jQuery
全站最详细的Vuex教程
Apr 13 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
Dec 03 Javascript
bootstrap table.js动态填充单元格数据的多种方法
Jul 18 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
Apr 16 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
Ajax PHP简单入门教程代码
2008/04/25 PHP
一个PHP验证码类代码分享(已封装成类)
2011/07/17 PHP
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
2014/08/18 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
CodeIgniter分页类pagination使用方法示例
2016/03/28 PHP
常用PHP封装分页工具类
2017/01/14 PHP
php头像上传预览实例代码
2017/05/02 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
2017/07/19 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
JavaScript 滚轮事件使用说明
2010/03/07 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
js验证电话号码与手机支持+86的正则表达式
2014/01/23 Javascript
基于jQuery实现最基本的淡入淡出效果实例
2015/02/02 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
2017/02/15 Javascript
JavaScript面向对象程序设计创建对象的方法分析
2018/08/13 Javascript
通过cordova将vue项目打包为webapp的方法
2019/02/02 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
python 获取本机ip地址的两个方法
2013/02/25 Python
Python3指定路径寻找符合匹配模式文件
2015/05/22 Python
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
python 3利用BeautifulSoup抓取div标签的方法示例
2017/05/28 Python
python实现textrank关键词提取
2018/06/22 Python
使用Python读取二进制文件的实例讲解
2018/07/09 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
pytorch快速搭建神经网络_Sequential操作
2020/06/17 Python
Clarks鞋法国官方网站:英国其乐鞋品牌
2018/02/11 全球购物
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
爱护公共设施的标语
2014/06/24 职场文书
个人作风建设心得体会
2014/10/22 职场文书
永远是春天观后感
2015/06/12 职场文书
Go web入门Go pongo2模板引擎
2022/05/20 Golang