千家信息网

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

发表于:2025-02-24 作者:千家信息网编辑
千家信息网最后更新 2025年02月24日,本篇内容介绍了"element中el-form-item属性prop的坑怎么解决"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大
千家信息网最后更新 2025年02月24日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绑定是失败的

                        
取消 确定

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

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

更好的第二种写法如下

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

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

表单 前端 菜单 属性 图标 字段 管理 写法 数据 参考 输入 元素 内容 动态 组件 规则 两个 名字 开头 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全与执法可以考什么岗位 外文专利数据库属于什么 北京推广软件开发公司 网络安全威胁的主要来源 oracle更新数据库 《网络安全伴我行》初一作文 外国网络安全排名 同一个类中连接多个数据库 抚州微信小说软件开发费用多少 戴尔服务器管理口命令行 山东华云网络技术有限公司 致成网络技术有限公司怎么样 网络安全小场景 电子电工的计算机网络技术 用服务器实现多用户上网 互联网科技台历 服务器最多能装多大的内存 闵行区电话网络技术价格咨询 数据库数据重复值怎么设置 易班网络安全作品征集 企业网络技术服务部长 触动精灵本地数据库 上海网络安全准入控制系统供应商 命令打开服务器 互联网科技资料英文 我的世界服务器给物品 网络安全监测管理中心 网络安全监测装置有哪些厂家 大专计算机网络技术面试常问问题 新城区政府网络安全
0