Form 表单
由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据。
引入
js
html
<script type="module">
import "./node_modules/easy-component-ui/components/ea-form/index.js";
</script>
css
TIP
需要注意的是, 如果需要使用到带有图标的 属性/组件
, 需要提前使用 link
标签引入图标文件
html
<link
rel="stylesheet"
href="./node_modules/easy-component-ui/components/ea-icon/index.css"
/>
自定义样式
移步到 CSS Part。
基本表单
包括各种表单项,比如输入框、选择器、开关、单选框、多选框等
请正确填写姓名, 长度为 2-4 个字符
请选择性别
请至少选择一种爱好
校区不能为空
校区不能为空
到达日期不能为空
到达时间不能为空
到达时间不能为空
查看代码
html
<div class="demo">
<ea-form id="basicForm">
<ea-form-item label="姓名">
<div slot="invalid-text">请正确填写姓名, 长度为 2-4 个字符</div>
<ea-input name="name" placeholder="姓名" value="洛霖"></ea-input>
</ea-form-item>
<ea-form-item label="性别">
<div slot="invalid-text">请选择性别</div>
<ea-radio-group name="gender" value="男">
<ea-radio value="男">男</ea-radio>
<ea-radio value="女">女</ea-radio>
</ea-radio-group>
</ea-form-item>
<ea-form-item label="爱好">
<div slot="invalid-text">请至少选择一种爱好</div>
<ea-checkbox-group name="hobby" value="吃饭">
<ea-checkbox value="吃饭">吃饭</ea-checkbox>
<ea-checkbox value="睡觉">睡觉</ea-checkbox>
<ea-checkbox value="编程">编程</ea-checkbox>
</ea-checkbox-group>
</ea-form-item>
<ea-form-item label="宿舍">
<div slot="invalid-text">校区不能为空</div>
<ea-switch
name="dorm"
inactive-color="#409eff"
active-color="#13ce66"
inactive-text="四人间"
active-text="六人间"
>
</ea-switch>
</ea-form-item>
<ea-form-item label="校区">
<div slot="invalid-text">校区不能为空</div>
<ea-select name="area" placeholder="请选择校区" selection="A 校区">
<ea-option value="A 校区">A 校区</ea-option>
<ea-option value="B 校区">B 校区</ea-option>
</ea-select>
</ea-form-item>
<ea-form-item label="到达日期">
<div slot="invalid-text">到达日期不能为空</div>
<ea-date-picker name="arrivalDate" value="2024-10-1"></ea-date-picker>
</ea-form-item>
<ea-form-item label="到达时间">
<div slot="invalid-text">到达时间不能为空</div>
<ea-time-picker
name="arrivalTime"
time="17:0:0"
limit-range-start="9:0:0"
limit-range-end="17:00:0"
>
</ea-time-picker>
</ea-form-item>
<ea-form-item label="备注">
<div slot="invalid-text">到达时间不能为空</div>
<ea-textarea
name="remark"
type="textarea"
rows="2"
placeholder="这不是空的"
></ea-textarea>
</ea-form-item>
<ea-form-item>
<ea-button id="basicFormSubmitBtn" type="primary">提交</ea-button>
</ea-form-item>
</ea-form>
</div>
表单验证
在防止用户犯错的前提下,尽可能让用户更早地发现并纠正错误。通过设置rules
属性,可以开启表单验证。
WARNING
注意: 在 VUE
环境下, rules
的设置推荐在 ready
事件触发时设置,否则可能会导致表单验证无效。
同理, 若原生环境出现该问题, 也可使用该方法。
js
EaForm.addEventListener("ready", () => {
EaForm.rules = {
name: { required: true, min: 2, max: 4 },
phone: { required: true, reg: /^1[3456789]\d{9}$/ },
gender: { required: true, trigger: "change" },
hobby: { required: true, trigger: "change" },
area: { required: true },
arrivalDate: { required: true },
arrivalTime: { required: true },
};
});
请正确填写姓名, 长度为 2-4 个字符
请正确填写手机号
请选择性别
请至少选择一种爱好
校区不能为空
校区不能为空
到达日期不能为空
到达时间不能为空
到达时间不能为空
查看代码
html
html
<div class="demo">
<ea-form id="basicForm">
<ea-form-item label="姓名">
<div slot="invalid-text">请正确填写姓名, 长度为 2-4 个字符</div>
<ea-input name="name" placeholder="姓名" value="洛霖"></ea-input>
</ea-form-item>
<ea-form-item label="性别">
<div slot="invalid-text">请选择性别</div>
<ea-radio-group name="gender" value="男">
<ea-radio value="男">男</ea-radio>
<ea-radio value="女">女</ea-radio>
</ea-radio-group>
</ea-form-item>
<ea-form-item label="爱好">
<div slot="invalid-text">请至少选择一种爱好</div>
<ea-checkbox-group name="hobby" value="吃饭">
<ea-checkbox value="吃饭">吃饭</ea-checkbox>
<ea-checkbox value="睡觉">睡觉</ea-checkbox>
<ea-checkbox value="编程">编程</ea-checkbox>
</ea-checkbox-group>
</ea-form-item>
<ea-form-item label="宿舍">
<div slot="invalid-text">校区不能为空</div>
<ea-switch
name="dorm"
inactive-color="#409eff"
active-color="#13ce66"
inactive-text="四人间"
active-text="六人间"
>
</ea-switch>
</ea-form-item>
<ea-form-item label="校区">
<div slot="invalid-text">校区不能为空</div>
<ea-select name="area" placeholder="请选择校区" selection="A 校区">
<ea-option value="A 校区">A 校区</ea-option>
<ea-option value="B 校区">B 校区</ea-option>
</ea-select>
</ea-form-item>
<ea-form-item label="到达日期">
<div slot="invalid-text">到达日期不能为空</div>
<ea-date-picker name="arrivalDate" value="2024-10-1"></ea-date-picker>
</ea-form-item>
<ea-form-item label="到达时间">
<div slot="invalid-text">到达时间不能为空</div>
<ea-time-picker
name="arrivalTime"
time="17:0:0"
limit-range-start="9:0:0"
limit-range-end="17:00:0"
>
</ea-time-picker>
</ea-form-item>
<ea-form-item label="备注">
<div slot="invalid-text">到达时间不能为空</div>
<ea-textarea
name="remark"
type="textarea"
rows="2"
placeholder="这不是空的"
></ea-textarea>
</ea-form-item>
<ea-form-item>
<ea-button id="basicFormSubmitBtn" type="primary">提交</ea-button>
</ea-form-item>
</ea-form>
</div>
js
js
const validtorForm = {
form: document.querySelector("#validtorForm"),
btn: document.querySelector("#validtorFormSubmitBtn"),
resetBtn: document.querySelector("#validtorFormResetBtn"),
init() {
this.form.addEventListener("ready", () => {
this.form.rules = {
name: { required: true, min: 2, max: 4 },
phone: { required: true, reg: /^1[3456789]\d{9}$/ },
gender: { required: true, trigger: "change" },
hobby: { required: true, trigger: "change" },
area: { required: true },
arrivalDate: { required: true },
arrivalTime: { required: true },
};
});
this.btn.addEventListener("click", () => {
this.form
.validate()
.then((res) => {
console.log(res);
})
.catch((err) => {
console.log(err);
});
});
this.resetBtn.addEventListener("click", () => {
this.form.reset();
});
},
};
validtorForm.init();
自定义验证
在防止用户犯错的前提下,尽可能让用户更早地发现并纠正错误。在 rules
中添加key
值为reg
, value
为正则表达式。
WARNING
若出现表单验证规则未正确设置, 可以参考上一个示例.
请正确填写手机号
请正确填写邮箱
查看代码
html
html
<ea-form id="customValidtorForm">
<ea-form-item label="手机号">
<div slot="invalid-text">请正确填写手机号</div>
<ea-input name="phone" placeholder="手机号"></ea-input>
</ea-form-item>
<ea-form-item label="邮箱">
<div slot="invalid-text">请正确填写邮箱</div>
<ea-input name="email" placeholder="邮箱"></ea-input>
</ea-form-item>
<ea-form-item>
<div style="display: flex; justify-content: space-between;">
<ea-button
id="customValidtorFormSubmitBtn"
type="primary"
style="margin-right: 1rem;"
>提交</ea-button
>
<ea-button id="customValidtorFormResetBtn">重置</ea-button>
</div>
</ea-form-item>
</ea-form>
js
js
const customValidtorForm = {
form: document.querySelector("#customValidtorForm"),
btn: document.querySelector("#customValidtorFormSubmitBtn"),
resetBtn: document.querySelector("#customValidtorFormResetBtn"),
init() {
this.form.rules = {
phone: { required: true, reg: /^1[3456789]\d{9}$/, trigger: "change" },
email: {
required: true,
reg: /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/,
trigger: "change",
},
};
this.btn.addEventListener("click", () => {
this.form
.validate()
.then((res) => {
console.log(res);
})
.catch((err) => {
console.log(err);
});
});
this.resetBtn.addEventListener("click", () => {
this.form.reset();
});
},
};
customValidtorForm.init();
Form Attributes
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
data | 表单数据 | Object | - | - |
rules | 校验规则 | Object | - | - |
FormItem Attributes
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
label | 单个表单的标签 | String | - | - |
trigger | 校验触发器 | String | blur/change | blur |
is-required | 是否必填(可以在元素上添加该属性, 但建议以rules 的方式设置) | Boolean | - | false |
Form CSS Part
用法可参考 MDN ::part()伪类
名称 | 说明 |
---|---|
container | 表单容器 |
FormItem CSS Part
名称 | 说明 |
---|---|
container | 表单项容器, 包含: 标签容器label-wrap , 内容容器content-wrap |
label-wrap | 标签容器(即 title 属性设置的所在容器), 包含: 标签插槽 |
content-wrap | 内容容器, 包含: 错误提示容器invalid-wrap , 默认插槽 |
invalid-wrap | 错误提示容器, 包含: 错误提示插槽 |
Form Methods
方法名 | 说明 | 参数 |
---|---|---|
validate | 校验表单 | - |
reset | 重置表单 | - |
FormItem Slots
name | 说明 |
---|---|
label | 表单标签(title 属性) 的内容 |
invalid-text | 错误提示的内容 |