码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • ElementUI validate 验证结果错误的问题解决过程


    目录

    1、问题背景:

    2、问题描述:

    3、 解决过程:

    4、解决方法:

    5、参考文章:


    1、问题背景:

    我做了一个自定义组件,然后监听组件产生的数据作为form的值,表单大致结构如下:

    1. <el-form-item :label="v.tagName" v-for="(v,k) in tags" :key="k" :prop="v.id+''">
    2. <el-tag style="margin: auto 3px" v-for="(item,index) in checkedMap[v.id]['objList']" :key="index"
    3. size="medium" closable>
    4. {{ item.label }}
    5. el-tag>
    6. <el-button icon="el-icon-plus" size="mini"
    7. @click="openTagTree(v.id,v,checkedMap[v.id]['list'])">el-button>
    8. el-form-item>

    这是表单的其中一个item,也是出问题的item。上述代码中可见我是将一个tag对象的Id转换为string作为prop,但是在item中却没有使用v-model来监听表单值的变化,而是通过下图中的“+”按钮调用其他组件来完成表单赋值。

    2、问题描述:

    如下图所示,由其他组件修改表单数据之后,验证器对表单进行验证时,并没有正确的给出验证结果,其机构项Item明明已有数据,但是验证器依旧给出了该项为空的提示。

    下图中可以看到表单数据中(右侧标黄处)110项已有了数据,该项即是前面的被修改项,但是验证器依旧认为该项数据为空。 

    3、 解决过程:

    我猜测是因为Vue的数据变更监听问题,因为我在代码中多处使用了如下方式为表单进行赋值,在Vue中直接使用这种索引市赋值方法会造成Vue无法监听data中的数据变化,所以造成验证器无法认为该项Item还未被修改,最后导致了问题发生。

    this.form['xxx']=['xxx']

    4、解决方法:

    在Vue中如果需要针对多层结构的对象进行修改,最好使用$set方法进行修改,使用方法如下:

    this.$set(this.form,'key','value')

    这样就不会使得Vue无法监听对象属性值的变化。但是在Vue中,还是应该尽量避免超多层结构对象的使用,因为层数一旦过多,及时使用$set也有可能使得Vue无法监听该对象的属性变化

    补充(源于Vue官网):

    Vue 无法检测 property 的添加或移除。由于 Vue 会在初始化实例时对 property 执行 getter/setter 转化,所以 property 必须在 data 对象上存在才能让 Vue 将它转换为响应式的。

    对于已经创建的实例,Vue 不允许动态添加根级别的响应式 property。但是,可以使用 Vue.set(object, propertyName, value) 方法向嵌套对象添加响应式 property。

    5、参考文章:

    1. element ui表单验证原理_akatukijohi的博客-CSDN博客_element表单验证原理
    2. 深入响应式原理 — Vue.js (vuejs.org)
  • 相关阅读:
    3:kotlin 逻辑控制(Control flow)
    1.微信APP首页UI结构设计思想viewpager
    【Transformers】第 9 章 :处理很少或没有标签
    MindOpt有关于Python的建模与优化
    QuartzDataSourceScriptDatabaseInitializer Unable to detect database type
    javase javaee javame
    Mysql易错知识点整理(待更新)
    加密与安全 _ 安全原则:任何客户端的东西都不可信任
    Apipost连接数据库详解
    RS485 光照度传感器 pc串口工具调试设备 亲身体验
  • 原文地址:https://blog.csdn.net/nameFailed/article/details/126208654
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号