详解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 相关文章推荐
javascript中字符串拼接需注意的问题
Jul 13 Javascript
js身份证判断方法支持15位和18位
Mar 18 Javascript
当滚动条滚动到页面底部自动加载增加内容的js代码
May 13 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
Mar 04 Javascript
jQuery实现的Div窗口震动效果实例
Aug 07 Javascript
js实现点击向下展开的下拉菜单效果代码
Sep 01 Javascript
JavaScript获取浏览器信息的方法
Nov 20 Javascript
原生js和jquery分别实现横向导航菜单效果
May 13 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
Jun 25 Javascript
在vue项目中使用Nprogress.js进度条的方法
Jan 31 Javascript
socket io与vue-cli的结合使用的示例代码
Nov 01 Javascript
详解Vue的mixin策略
Nov 19 Vue.js
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 数组的指针操作实现代码
2011/02/08 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
JS 建立对象的方法
2007/04/21 Javascript
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
IE无法设置短域名下Cookie
2010/09/23 Javascript
jQuery实现长文字部分显示代码
2013/05/13 Javascript
Javascript和HTML5利用canvas构建Web五子棋游戏实现算法
2013/07/17 Javascript
IE浏览器不支持getElementsByClassName的解决方法
2014/08/27 Javascript
javascript框架设计之框架分类及主要功能
2015/06/23 Javascript
详解js中call与apply关键字的作用
2016/11/21 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
如何用js判断dom是否有存在某class的值
2017/02/13 Javascript
VUE开发一个图片轮播的组件示例代码
2017/03/06 Javascript
BootStrap Fileinput上传插件使用实例代码
2017/07/28 Javascript
微信小程序实现列表下拉刷新上拉加载
2020/07/29 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
vue router 用户登陆功能的实例代码
2019/04/24 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
微信小程序实现录音功能
2019/11/22 Javascript
JavaScript常用工具函数汇总(浏览器环境)
2020/09/17 Javascript
Vue包大小优化的实现(从1.72M到94K)
2021/02/18 Vue.js
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
python实现批量监控网站
2016/09/09 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
pytorch中的上采样以及各种反操作,求逆操作详解
2020/01/03 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
大学生水文观测实习自我鉴定
2013/09/29 职场文书
计算机专业毕业生求职信分享
2013/12/24 职场文书
2014年社会实践活动总结范文
2014/04/29 职场文书
敲诈同学钱财检讨书范文
2014/11/18 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
大足石刻导游词
2015/02/02 职场文书
交通事故责任认定书
2015/08/06 职场文书
《坐井观天》教学反思
2016/02/18 职场文书
Python 视频画质增强
2022/04/28 Python