提交后重置Angular Signal表单的验证信息
我在表单校验信息上遇到了一个问题。
我在整个应用中使用Bootstrap,并且有一个用于添加设备的表单,它通过Bootstrap模态框显示。一直工作正常,问题在于我再次点击“添加设备”时,会出现一堆错误信息。
问题显然在于touched这个布尔值在提交后没有被重置,但我不知道该如何重置它。
抱歉,我的英语说得不太好。
@if (addForm.name().invalid() && addForm.name().touched()) {
<div class="error">
@for (error of addForm.name().errors(); track error.kind) {
<span>{{ error.message }}</span>
}
</div>
解决方案
请参考文档,尝试使用官方推荐的重置状态方法。
成功提交表单后,你可能希望将其恢复到初始状态——清除用户交互历史和字段值。reset() 方法会清除touched与 dirty标志。你也可以向reset() 传入一个可选值来更新模型数据:
export class Contact {
private readonly INITIAL_MODEL = {name: '', email: '', message: ''};
contactModel = signal({...this.INITIAL_MODEL});
contactForm = form(this.contactModel, {
submission: {
action: async (f) => {
await this.api.sendMessage(this.contactModel());
// Clear interaction state (touched, dirty) and reset to initial values
f().reset({...this.INITIAL_MODEL});
},
},
});
}
HTML:
确保表单按钮的类型为 submit。
<form [formRoot]="contactForm">
<input [formField]="contactForm.name" />
<input type="email" [formField]="contactForm.email" />
<input type="text" [formField]="contactForm.message" />
<button type="submit">Register</button>
</form>
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。