返回顶部
首页 > 资讯 > 精选 >element中form组件prop嵌套属性问题怎么解决
  • 814
分享到

element中form组件prop嵌套属性问题怎么解决

2023-06-29 16:06:14 814人浏览 安东尼
摘要

本篇内容介绍了“element中fORM组件prop嵌套属性问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Introductio

本篇内容介绍了“element中fORM组件prop嵌套属性问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Introduction

分享今天同事问的一个问题, 下面这段代码会报错,先看代码:重点是el-form-item组件的prop属性

<template>  <div id="app">    <el-form label-width="100px" :model="ruleForm" :rules="rules">      <el-form-item        v-for="(item, index) in tableData"        :key="item.id"        :prop="'tableData.' + index + '.name'"        :rules="rules.name"      >        <el-input v-model="item.name"></el-input>      </el-form-item>    </el-form>  </div></template><script>export default {  name: "App",  data() {    return {      ruleForm: {        name: ''      },      tableData: [        { id: 1, name: "" },        { id: 2, name: "" },      ],      rules: {        name: [          {            required: true,            message: "请输入活动名称",            trigger: "blur",            validator(rule, value, callback) {              console.log("rule: ", rule);              console.log("value: ", value);            },          },        ],      },    };  },};</script>

我第一眼看上去的时候并没有发现什么问题,但这段代码实实在在的报错了,我们来看一下错误

element中form组件prop嵌套属性问题怎么解决

首先需要明确的是 这是一个警告, 并非一个error, 但他直接导致了我们的代码执行结果非预期,我们来分析一下这个错误

首先这个错误的第一句**Error in mounted hook**, 错误发生在mounted钩子中

请安排一个有效的path给prop

首先第一个问题,我的代码中并没有mounted函数,他怎么会报错呢?
第二个问题,让我们提供一个有效的prop, 但这里我们明明给的是有效的撒。
最后查了官网并查了百度 都没有找到很好的解决方式,最后没有办法,只能去看一下element-ui的源码, 下面是源码环节:

找到packages/form/src/form-item.Vue这个文件

element中form组件prop嵌套属性问题怎么解决

我们根据他的报错来分析, 首先他说`mounted hook`中报错, 那我们就直接来看这个hook做了什么事情: 

mounted() {  if (this.prop) {    this.dispatch('ElForm', 'el.form.addField', [this]); // 这一步不用管    let initialValue = this.fieldValue; // 取得fieldvalue    // 判断fieldvalue是不是数组, 如果是数组则合并    if (Array.isArray(initialValue)) {      initialValue = [].concat(initialValue);    }    // 给this定义一个initialValue属性    Object.defineProperty(this, 'initialValue', {      value: initialValue    });    this.addValidateEvents();  }}

我看这段代码的第一反应是, 这也没干什么事儿啊, 就取了个值 赋了个值, 看了一会儿我发现, 有一个盲点就是this.fieldValue这里, 这是一个什么东西呢?不知道 去看一下。

  computed: {      fieldValue() {        // 1.拿到当前"form"的model属性(这里很重要, 要记住这一步)        const model = this.form.model;        if (!model || !this.prop) { return; }        // 2.拿到当前"form-item"的prop属性,         // 也就是我们传的那个:prop="'tableData.' + index + '.name'"        let path = this.prop;        if (path.indexOf(':') !== -1) {          path = path.replace(/:/, '.');        }        // 3.将model和path传给了getPropByPath方法        return getPropByPath(model, path, true).v;      }    }

代码翻到fieldValue这里, 发现这是一个computed属性(步骤见注释), 发现最终返回getPropByPath方法的返回结果, 我们接着去看一下这个方法.
我们发现这个方法是在utils/util下的一个方法

element中form组件prop嵌套属性问题怎么解决

第一眼看到这个方法, 是不是有一种眼熟的感觉?越看越像js的一个面试题

function getValue(obj, path) { ...}const obj = { a: { b: { c: '1' } } }getValue(obj, 'a.b.c'); // 1

有木有啊! 有木有!不能说一模一样,只能说分毫不差,既然知道它是面试题就简单了,我们首先需要明确 这个方法的作用就是 通过嵌套字符串key 拿到key对应的value, 那我们来看一下element是怎么做的。

首先先看第一句代码let tempObj = obj, 这里第一次的obj是谁呢?是不是上面传过来的this.form.model啊? 我们来看一下 我们代码中传输的model是什么

element中form组件prop嵌套属性问题怎么解决

我们这里只需要记住, 我们传的是一个对象{ name: '' }好的 我们再来看下一步, path = 正则匹配, 最后的结果是keyArr = ['tableData', 0, 'name']下面的代码就是走keyArr的循环了, 这里我们是3次循环, 因为keyArr只有三个元素

我们还是来捋一下:

第一次循环, 此时的tempObj是 { name: '' }, key是tableData, key in tempObj?, 很显然是false, 所以直接走了else, 触发了throw new Error

其实看到这里我们就明白了, element在做prop判断的时候, 是通过判断key在不在model中的方式 来判断path是否合法的, 那我们知道这个原理之后, 只需要将我们的代码稍稍改动一下即可。

element中form组件prop嵌套属性问题怎么解决

我们只需要将tableData移到ruleForm中即可, 然后我们再来看控制台已经不报错了。

element中form组件prop嵌套属性问题怎么解决

“element中form组件prop嵌套属性问题怎么解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: element中form组件prop嵌套属性问题怎么解决

本文链接: https://lsjlt.com/news/325715.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • element中form组件prop嵌套属性问题怎么解决
    本篇内容介绍了“element中form组件prop嵌套属性问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Introductio...
    99+
    2023-06-29
  • element中form组件prop嵌套属性的问题解决
    目录Introduction总结Introduction 分享今天同事问的一个问题, 下面这段代码会报错,先看代码:重点是el-form-item组件的prop属性 <temp...
    99+
    2024-04-02
  • element中el-form-item属性prop的坑怎么解决
    本篇内容介绍了“element中el-form-item属性prop的坑怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!最近负责前后端...
    99+
    2023-06-29
  • element-uiel-dialog嵌套table组件,ref问题及解决
    目录element-ui el-dialog嵌套table组件,ref问题解决办法vue组件库 element-ui常见问题总结el-table相关el-form 表单相关el-di...
    99+
    2023-02-12
    element-ui el-dialog el-dialog嵌套table组件 element-ui el-dialog table ref
  • el-form-item prop属性动态绑定不生效问题及解决
    目录prop属性动态绑定不生效el-form-item中prop属性绑定报错控制台报错源代码修改后prop属性动态绑定不生效 做项目时表单有一项需要有条件展示是否校验,于是首先就想到...
    99+
    2022-11-13
    el-form-item prop prop属性绑定不生效 prop动态绑定
  • antd form表单中怎么嵌套自定义组件
    本篇内容主要讲解“antd form表单中怎么嵌套自定义组件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“antd form表单中怎么嵌套自定义组件”吧!表单部分<Fo...
    99+
    2023-07-05
  • 怎么解决iframe标签嵌套问题
    小编给大家分享一下怎么解决iframe标签嵌套问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!问题描述当我们使用easyui做后台管理系统的时候,会使用tree...
    99+
    2023-06-09
  • 解决@Validated注解无效,嵌套对象属性的@NotBlank无效问题
    目录@Validated注解无效,嵌套对象属性的@NotBlank无效步骤内层对象无法验证@Validated注解不生效问题、如何使用1、需要引入的包2、将@Validated打在c...
    99+
    2024-04-02
  • 数据库的嵌套查询的性能问题怎么解决
    本文小编为大家详细介绍“数据库的嵌套查询的性能问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“数据库的嵌套查询的性能问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新...
    99+
    2023-03-20
    数据库
  • Mybatis中association标签多层嵌套问题怎么解决
    这篇“Mybatis中association标签多层嵌套问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mybat...
    99+
    2023-06-29
  • mybatis in foreach双层嵌套问题怎么解决
    这篇文章主要介绍了mybatis in foreach双层嵌套问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mybatis in foreach双层嵌套问题怎...
    99+
    2023-07-05
  • vant中field组件label属性两端对齐问题怎么解决
    这篇文章主要介绍“vant中field组件label属性两端对齐问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vant中field组件label属性两端对齐问题怎么解决”文章能帮助大家解...
    99+
    2023-06-30
  • java嵌套for循环大小问题怎么解决
    在解决Java嵌套for循环大小问题时,可以考虑以下几种方法:1. 使用不同的循环变量:在嵌套循环中使用不同的循环变量,确保内外两层...
    99+
    2023-09-13
    java
  • SpringBoot之QueryDsl嵌套子查询问题怎么解决
    今天小编给大家分享一下SpringBoot之QueryDsl嵌套子查询问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2023-07-05
  • 解决Vue的组件属性this不存在问题
    目录Vue的组件属性this不存在问题来源原因解决方案Vue中的this丢失解决方案Vue的组件属性this不存在 问题来源 今天写代码,发现我的mounted方法里面的this全部...
    99+
    2024-04-02
  • vant中field组件label属性两端对齐问题及解决
    目录field组件label属性两端对齐问题先看看原来的四种效果 label左对齐看看官方文档另一种解决思路vant输入框label两端对齐field组件label属性两端对齐问题 ...
    99+
    2024-04-02
  • pydantic resolve怎么解决嵌套数据结构生成问题
    这篇文章主要介绍“pydantic resolve怎么解决嵌套数据结构生成问题”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“pydantic resolve怎么解决嵌套数据结构生...
    99+
    2023-07-05
  • Element组件beforeUpload上传前限制失效问题怎么解决
    本篇内容介绍了“Element组件beforeUpload上传前限制失效问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Eleme...
    99+
    2023-07-05
  • ES6中怎么用解构赋值获取嵌套对象的属性
    小编给大家分享一下ES6中怎么用解构赋值获取嵌套对象的属性,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!用解构赋值获取嵌套对象的...
    99+
    2024-04-02
  • vue遍历中存在el-form问题怎么解决
    这篇“vue遍历中存在el-form问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue遍历中存在el-form...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作