zoukankan      html  css  js  c++  java
  • Element-ui表单验证(二)

    业务场景

    • 新增一个字段,该字段对应多个输入框,该字段属性动态获取,对该字段进行动态校验

    解决措施

    • data中定义,发送请求,为该字段进行属性初始化
    return {
          language: this.$store.getters.language,
          loading: false, // 加载动画
          info: {
            // 基本信息
            name: '', // 系统接口名称
            languageInterfaceName: {}, // 接口名称中英文 (需)
            ...     
        },
    };
    
    
      created() {
        this.getLanguageType();
      },
      getLanguageType() {
          getLang('') // 获取多语言
          .then(response => {
            const obj = {};
            response.data.list.forEach(val => {
              const prop = val.language; // en
              obj[prop] = '';
            });
            this.info.languageInterfaceName = obj;
          })
          .catch(error => {
            console.log(error);
          });
        }
    • 定义结构
    <!-- 多语言接口名称 -->
    <el-form-item :label="'多语言接口名:'+key"
        v-for="(value, key, index) in this.info.languageInterfaceName"
        :key="index" :prop="`languageInterfaceName.${key}`" :rules="rules.language1">
        <el-input class="MW300" v-model="info.languageInterfaceName[key]" placeholder="请输入"></el-input>
    </el-form-item>
    • 自定义校验
    rules: {
        language1: [
          { required: true, message: '不能为空', trigger: 'blur' }
        ]
    }

    效果

    踩坑

    • 直接暴力修改属性,导致数据绑定不上

      即写 getLanguageType() 方法时,直接使用 this.info.languageInterfaceName[key] 方式 给其增加属性,导致vue绑定不上

    • 不懂 prop 跟 rules
      • prop:form里面的校验只能校验到form绑定的值的第一层,即假如,form上写的为 :model="info",只能绑定到 info.xxxx,诸如上述的 info.xxx.yy这种需要进行自定义
      • :prop="'languageInterfaceName.'+key"(与上述方式一样,相当于简化了字符串拼接操作)
      • rules:如果是自定义的校验,需要rules精确指定具体的检验,比如将language1写在rules下,就要写成 :rules = “rules.language1”
  • 相关阅读:
    Docker-网络命名空间
    Docker-为镜像添加SSH服务(CentOS)
    Docker-Dockerfile方式创建镜像
    Docker-Dockerfile方式创建数据卷容器
    MySQL-存储过程批量插入数据
    CentOS 升级内核
    集合-ConcurrentHashMap-jdk1.7
    Redis Lua脚本
    javascript中的string对象
    初识 控制台
  • 原文地址:https://www.cnblogs.com/superhonors/p/13042363.html
Copyright © 2011-2022 走看看