返回顶部
首页 > 资讯 > 精选 >element中el-form-item属性prop的坑怎么解决
  • 448
分享到

element中el-form-item属性prop的坑怎么解决

2023-06-29 16:06:04 448人浏览 独家记忆
摘要

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

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

最近负责前后端项目开发,有个需求是实现Djangorestframework(drf)+element实现动态渲染form表单,drf后端提供JSON前端json中获取form表单元素,并且绑定表单验证规则

在el-form-item属性prop上遇到报错或者没绑定到数据,报错如下

[Vue warn]: Error in render: "TypeError: Cannot read properties of undefined (reading 'prop')"

element官方文档解释el-form-item的prop必须是el-form属性model的直接子属性

后端返回数据如下

{    "status": "success",    "code": 200,    "data": {        "form_attributes": {            "inline": true,            "label-width": "auto",            "size": "small"        },        "form_data": {            "name": null,            "path": null,            "component": null,            "hidden": false,            "meta": {                "icon": null,                "title": null            },            "pid": null        },        "form_item_list": [            {                "type": "text",                "prop": "name",                "label": "菜单名",                "placeholder": "请输入菜单名",                "rules": [                    {                        "required": true,                        "message": "请输入菜单名",                        "trigger": "blur"                    }                ]            },            {                "type": "text",                "prop": "path",                "label": "链接地址",                "placeholder": "'/'开头",                "rules": [                    {                        "required": true,                        "message": "'/'开头",                        "trigger": "blur"                    }                ]            },            {                "type": "text",                "prop": "component",                "label": "组件",                "placeholder": "参考前端组件填写",                "rules": [                    {                        "required": true,                        "message": "参考前端组件填写",                        "trigger": "blur"                    }                ]            },            {                "type": "switch",                "prop": "hidden",                "label": "是否隐藏",                "value": false            },            {                "type": "json",                "prop": "meta",                "item": [                    {                        "type": "text",                        "prop": "icon",                        "label": "图标",                        "placeholder": "图标名字,参考前端图标",                        "rules": [                            {                                "required": true,                                "message": "图标名字,参考前端图标",                                "trigger": "blur"                            }                        ]                    },                    {                        "type": "text",                        "prop": "title",                        "label": "标题",                        "placeholder": "请输入菜单名",                        "rules": [                            {                                "required": true,                                "message": "请输入菜单名",                                "trigger": "blur"                            }                        ]                    }                ]            },            {                "type": "select",                "prop": "pid",                "label": "父菜单",                "clearable": true,                "filterable": false,                "multiple": false,                "options": [                    {                        "label": "系统管理",                        "value": 2                    },                    {                        "label": "用户管理",                        "value": 3                    },                    {                        "label": "菜单管理",                        "value": 4                    },                    {                        "label": "权限管理",                        "value": 5                    },                    {                        "label": "角色管理",                        "value": 6                    }                ]            }        ]    },    "message": null}

从上面可以看到form表单元素对应的是 form_item_list,表单提交数据是 form_data,这两个是分开,也就是el-form中model绑定是 form_data 而el-form-item遍历的是 form_item_list,注意 form_item_list 中含有嵌套类型json,对应的后端是json字段渲染表单,单独提供form_data返回字段设计是为了控制前端json内容,动态字段中过于灵活,可以随意修改json包含的字段和类型,所以返回字段由后端控制和校验

截取前端渲染表单代码如下,注意这个时候能渲染但是rules绑定是失败的

<!-- 添加菜单对话框 -->    <el-dialog title="添加菜单" :visible.sync="aDDDialogVisible" width="50%" :close-on-click-modal="false" @close="addDialoGClosed">      <!-- 表单内容主体 -->      <el-form ref="addFormRef" :model="formData" :size="formAttributes.size" :inline="formAttributes.inline" :label-width="formAttributes.labelWidth">        <div v-for="(item, index) in formItemList" :key="index">          <el-form-item :prop="formItemList + index + item.prop" :label="item.label" :rules="item.rules">            <!-- text输入框 -->            <el-input v-if="item.type==='text'" v-model="formData[item.prop]" clearable :placeholder="item.placeholder"></el-input>            <!-- textarea输入框 -->            <el-input v-if="item.type==='textarea'" v-model="formData[item.prop]" clearable autosize :type="textarea" :placeholder="item.placeholder"></el-input>            <!-- 下拉框 -->            <el-select v-if="item.type==='select'" v-model="formData[item.prop]" clearable :multiple="item.multiple">              <el-option v-for="op in item.options" :key="op.value" :label="op.label" :value="op.value"></el-option>            </el-select>            <el-switch v-if="item.type==='switch'" v-model="formData[item.prop]" :label="item.label"></el-switch>            <template v-if="item.type==='json'">              <div v-for="(json_item, json_index) in item.item" :key="json_index">                <el-form-item :prop="item.item + json_index + json_item.prop" :label="json_item.label" :rules="json_item.rules" >                  <!-- text输入框 -->                  <el-input v-if="json_item.type==='text'" v-model="formData[item.prop][json_item.prop]" clearable :placeholder="json_item.placeholder"></el-input>                  <!-- textarea输入框 -->                  <el-input v-if="json_item.type==='textarea'" v-model="formData[json_item.prop]" clearable autosize :type="textarea" :placeholder="json_item.placeholder"></el-input>                  <!-- 下拉框 -->                  <!-- <el-select v-if="item.type==='select'" v-model="formData[item.prop]" clearable :placeholder="item.label" :multiple="item.multiple" @change="item.change(formData[item.prop])"> -->                  <el-select v-if="json_item.type==='select'" v-model="formData[json_item.prop]" clearable :multiple="json_item.multiple">                    <el-option v-for="op in json_item.options" :key="op.value" :label="op.label" :value="op.value"></el-option>                  </el-select>                  <el-switch v-if="json_item.type==='switch'" v-model="formData[json_item.prop]" :label="json_item.label"></el-switch>                </el-form-item>              </div>            </template>          </el-form-item>        </div>      </el-form>      <!-- 底部 -->      <el-divider></el-divider>      <span slot="footer" class="dialog-footer">        <el-button @click="addDialogVisible = false">取消</el-button>        <el-button type="primary" @click="addForm">确定</el-button>      </span>    </el-dialog>

在前端渲染无法绑定到表单规则,如下图

element中el-form-item属性prop的坑怎么解决

经过研究,从上面的数据结构可以发现,form_data 中每个元素对应是 form_item_list 中的 prop,那么有两个写法可以定位
第一种写法如下,这种写法没那么直观

<!-- 普通字段渲染 --><el-form-item :prop="item.prop" :label="item.label" :rules="item.rules"><!-- json字段渲染 --><el-form-item :prop="item.prop + '.' + json_item.prop" :label="json_item.label" :rules="json_item.rules" >

更好的第二种写法如下

<el-form-item :prop="formItemList[index].prop" :label="item.label" :rules="item.rules"><el-form-item :prop="formItemList[index].prop + '.' + item.item[json_index].prop" :label="json_item.label" :rules="json_item.rules" >

此时能动态渲染表单和绑定表单项验证规则,如下图

element中el-form-item属性prop的坑怎么解决

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

--结束END--

本文标题: element中el-form-item属性prop的坑怎么解决

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

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

猜你喜欢
  • element中el-form-item属性prop的坑怎么解决
    本篇内容介绍了“element中el-form-item属性prop的坑怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!最近负责前后端...
    99+
    2023-06-29
  • element中el-form-item属性prop踩坑
    最近负责前后端项目开发,有个需求是实现Djangorestframework(drf)+element实现动态渲染form表单,drf后端提供json,前端从json中获取form表...
    99+
    2024-04-02
  • el-form-item prop属性动态绑定不生效问题及解决
    目录prop属性动态绑定不生效el-form-item中prop属性绑定报错控制台报错源代码修改后prop属性动态绑定不生效 做项目时表单有一项需要有条件展示是否校验,于是首先就想到...
    99+
    2022-11-13
    el-form-item prop prop属性绑定不生效 prop动态绑定
  • 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
  • vue遍历中存在el-form问题怎么解决
    这篇“vue遍历中存在el-form问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue遍历中存在el-form...
    99+
    2023-07-04
  • element ui的el-input-number修改数值失效怎么解决
    这篇文章主要介绍了element ui的el-input-number修改数值失效怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇element ui的el-input-number修...
    99+
    2023-06-30
  • vue使用element-ui按需引入时的坑怎么解决
    这篇文章主要讲解了“vue使用element-ui按需引入时的坑怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue使用element-ui按需引入时的坑怎么解决”吧!步骤:安装 e...
    99+
    2023-06-30
  • 使用el-checkbox-group选中后值为true和false遇到的坑怎么解决
    这篇文章主要讲解了“使用el-checkbox-group选中后值为true和false遇到的坑怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“使用el-checkbox-group选...
    99+
    2023-07-02
  • python中os.path.exits()的坑怎么解决
    问题有时候我们经常会看到类似的代码:assert os.path.isdir(path_model_dir) assert os.path.exits(path_model_dir)如果填写一个相对路径作为path_model_dir,那将...
    99+
    2023-05-16
    Python
  • springboot中用undertow的坑怎么解决
    这篇“springboot中用undertow的坑怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springboot...
    99+
    2023-06-29
  • Java中new BigDecimal()的坑怎么解决
    今天小编给大家分享一下Java中new BigDecimal()的坑怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2023-07-02
  • ElementUI中tree控件的坑怎么解决
    这篇文章主要讲解了“ElementUI中tree控件的坑怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ElementUI中tree控件的坑怎么解决”吧!一句话总结,就是很好很强大。但...
    99+
    2023-06-19
  • elementUI中MENU菜单的坑怎么解决
    这篇文章主要介绍了elementUI中MENU菜单的坑怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇elementUI中MENU菜单的坑怎么解决文章都会有所收获,下面我们一起来看看吧。需求:点击当前页面...
    99+
    2023-06-29
  • Java中ArrayList和SubList的坑怎么解决
    本文小编为大家详细介绍“Java中ArrayList和SubList的坑怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中ArrayList和SubList的坑怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-06-30
  • MyBatis+MyBatisPlus中遇到的坑怎么解决
    这篇文章主要介绍了MyBatis+MyBatisPlus中遇到的坑怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MyBatis+MyBatisPlus中遇到的坑怎么解决文章都会有所收获,下面我们一起来看...
    99+
    2023-07-05
  • Python多维列表中的坑怎么解决
    数组常用想法总结:(以下默认nums为数组。) 1.遍历数组 遍历:for num in nums: xxxx带索引遍历for idx,num in enumerate(nums): xxxx2.动态规划(dp) 动态规划一般可以用一个...
    99+
    2023-05-14
    Python
  • js中使用Window location.href属性无效怎么解决
    如果在JavaScript中使用Window.location.href属性没有效果,有几种可能的解决方法:1. 确保代码运行在浏览...
    99+
    2023-10-11
    js
  • vue注释template中组件的属性报错怎么解决
    这篇文章主要讲解了“vue注释template中组件的属性报错怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue注释template中组件的属性报错怎么解决”吧!注释templat...
    99+
    2023-06-30
  • Spring配置文件中property属性的name出错怎么解决
    要解决Spring配置文件中property属性的name出错问题,可以按照以下步骤进行处理:1. 检查错误的name属性是否正确拼...
    99+
    2023-08-14
    Spring property
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作