如何为Form.io Builder添加不可删除的默认邮箱字段
解决方案
要给Form.io Builder添加默认且不可删除的邮箱字段,核心是利用Form.io内置的protected: true属性标记字段,该属性会让Builder禁止删除对应字段。具体实现步骤如下:
1. 定义默认邮箱字段配置
先创建邮箱字段的Schema配置,关键是设置protected: true:
const defaultEmailField = { type: 'email', label: '邮箱', key: 'email', placeholder: '请输入您的邮箱', required: true, protected: true, // 核心配置:禁止删除该字段 persistent: true };
2. 修改初始化代码,整合默认字段
在初始化Builder时,将默认邮箱字段合并到初始Schema中,同时做去重处理避免重复添加:
window.onload = function() { Formio.icons = 'fontawesome'; // 处理初始Schema,添加默认邮箱字段 let initialSchema = schema ? JSON.parse(schema) : {}; // 确保components数组存在 if (!initialSchema.components) { initialSchema.components = []; } // 检查是否已存在同key的邮箱字段,避免重复添加 const hasEmailField = initialSchema.components.some(comp => comp.key === 'email'); if (!hasEmailField) { initialSchema.components.unshift(defaultEmailField); // 将邮箱字段放在组件列表最顶部 } Formio.builder(document.getElementById('builder'), initialSchema).then(function(builder) { changeJson(builder.schema); builder.on('change', function() { changeJson(builder.schema); }); builder.on('submit', function() { return false; }); }); };
关键说明
protected: true:Form.io内置属性,标记后该字段在Builder中会隐藏删除按钮,无法被删除。- 去重逻辑:通过
key值判断是否已存在邮箱字段,若不需要可直接移除该判断。 - 字段位置:使用
unshift将邮箱字段放在组件列表顶部,若需要放在末尾可改用push。
内容的提问来源于stack exchange,提问作者Bamme
相关产品推荐
相关产品推荐

