Angular 在第二阶段提交后如何清除表格?
我有一些简单的带模板的角度2组件。提交后如何清除表单和所有字段?。我无法重新加载页面。 使用Angular 在第二阶段提交后如何清除表格?,angular,angular2-forms,Angular,Angular2 Forms,我有一些简单的带模板的角度2组件。提交后如何清除表单和所有字段?。我无法重新加载页面。 使用日期设置数据后。设置值(“”)字段仍然被触摸 从'angular2/core'导入{Component}; 从“angular2/common”导入{FORM_指令、FormBuilder、ControlGroup、Validators、Control}; @组成部分({ 选择器:“正在加载表单”, templateUrl:'app/loadings/loading form.component.html
日期设置数据后。设置值(“”)
字段仍然被触摸
从'angular2/core'导入{Component};
从“angular2/common”导入{FORM_指令、FormBuilder、ControlGroup、Validators、Control};
@组成部分({
选择器:“正在加载表单”,
templateUrl:'app/loadings/loading form.component.html',
指令:[格式指令]
})
导出类装入FormComponent{
私有形式:控制组;
私人日期:控制;
私人能力:控制;
构造函数(私有加载服务:加载服务,fb:FormBuilder){
this.date=新控件(“”,需要验证器);
此容量=新控件(“”,需要验证器);
this.form=fb.group({
“date”:this.date,
“容量”:此参数为0.capacity
});
}
onSubmit(值:任意):无效{
//将一些数据发送到后端
}
}
加载-form.component.html
装载形式
日期
容量
提交
另请参见(“重置表单标志”一节)
=RC.6
在RC.6中,应该支持更新表单模型。创建新表单组并分配给myForm
[formGroup]=“myForm”
也将被支持()
=RC.5
form.reset();
在新表单模块(>=RC.5)中,NgForm
有一个reset()
方法,还支持表单reset
事件。
关于这一点有一个新的讨论()。到目前为止,只有一些黑客可以清除表单,比如在提交后重新创建整个表单:从Angular2 RC5开始,
myFormGroup.reset()
似乎可以解决问题。我找到了另一个解决方案。它有点粗糙,但在angular2世界中广泛使用
由于*ngIf指令删除表单并重新创建它,因此只需将*ngIf添加到表单并将其绑定到某种formSuccessfullySent
变量即可这将重新创建表单,从而重置输入控件状态
当然,还必须清除模型变量。我发现为表单字段提供一个特定的模型类很方便。通过这种方式,我可以重置所有字段,就像创建此模型类的新实例一样简单。:) 要在提交后重置表单,只需调用
this.form.reset()
。通过调用reset()
它将:
newHero() {
return this.model = new Hero(42, 'APPLIED VALUE', '');
}
<button type="button" class="btn btn-default" (click)="heroForm.resetForm(newHero())">New Hero</button>
newHero(){
返回this.model=新英雄(42,‘应用值’,“”);
}
新英雄
从'@angular/core'导入{Component};
从'@angular/forms'导入{NgForm};
@组成部分({
选择器:“示例应用程序”,
模板:'
提交
名字值:{{First.value}}
名字有效:{{First.valid}
表单值:{f.value | json}
格式有效:{f.valid}',
})
导出类SimpleFormComp{
onSubmit(f:NgForm){
//一些东西
f、 resetForm();
}
}
对于angular version 4,您可以使用:
this.heroForm.reset();
但是,您可能需要一个初始值,如:
ngOnChanges() {
this.heroForm.reset({
name: this.hero.name, //Or '' to empty initial value.
address: this.hero.addresses[0] || new Address()
});
}
解决对象引用中的空问题很重要
参考,搜索“重置表单标志” 打个电话
clearForm()代码>在.ts文件中
尝试使用下面的示例代码片段清除表单数据
clearForm() {
this.addContactForm.reset({
'first_name': '',
'last_name': '',
'mobile': '',
'address': '',
'city': '',
'state': '',
'country': '',
'zip': ''
});
}
下面是我在Angular 7.3中的实现方法
// you can put this method in a module and reuse it as needed
resetForm(form: FormGroup) {
form.reset();
Object.keys(form.controls).forEach(key => {
form.get(key).setErrors(null) ;
});
}
无需调用表单。下面的clearValidators()
代码在Angular 4中对我有效
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
export class RegisterComponent implements OnInit {
registerForm: FormGroup;
constructor(private formBuilder: FormBuilder) { }
ngOnInit() {
this.registerForm = this.formBuilder.group({
empname: [''],
empemail: ['']
});
}
onRegister(){
//sending data to server using http request
this.registerForm.reset()
}
}
以下是我如何做到这一点的:
获取表单的本地引用:
@ViewChild('myForm',{static:false})myForm:NgForm;
无论何时需要重置表单,请调用resetForm
方法:
this.myForm.resetForm();
您需要@angular/forms
中的表单模块
,它才能工作。确保将其添加到模块导入中。this.myForm.reset()
这就足够了…您可以获得所需的输出要在提交时重置完整的表单,您可以在Angular中使用reset()。下面的示例在Angular 8中实现。
下面是一个订阅表单,我们将电子邮件作为输入
<form class="form" id="subscribe-form" data-response-message-animation="slide-in-left" #subscribeForm="ngForm"
(ngSubmit)="subscribe(subscribeForm.value); subscribeForm.reset()">
<div class="input-group">
<input type="email" name="email" id="sub_email" class="form-control rounded-circle-left"
placeholder="Enter your email" required ngModel #email="ngModel" email>
<div class="input-group-append">
<button class="btn btn-rounded btn-dark" type="submit" id="register"
[disabled]="!subscribeForm.valid">Register</button>
</div>
</div>
</form>
登记
参考官方文件: @masel.popowo是的,如果你想要原始的,…,那么重建表单是目前唯一的选择。@günter-zöchbauer如何重建表单?我自己还没有尝试过,但我想你应该放弃控制组,创建一个新的。将代码移到函数中,以便在必要时可以重复调用它。+1表示setErrors()。顺便提一下,我在这里记录了一个错误,我犯了一个错误,如果其他人做了类似的事情:如果你使用占位符,例如“foo”,不要调用control.updateValue(“foo”),而是调用control.setValue(null),我不知道控件上的setValue()
方法。仅updateValue()
Addition:我正在使用AngularDart,它还没有这样的重置方法。或者至少我现在没有发现DWith RC.6 j
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
export class RegisterComponent implements OnInit {
registerForm: FormGroup;
constructor(private formBuilder: FormBuilder) { }
ngOnInit() {
this.registerForm = this.formBuilder.group({
empname: [''],
empemail: ['']
});
}
onRegister(){
//sending data to server using http request
this.registerForm.reset()
}
}
<form class="form" id="subscribe-form" data-response-message-animation="slide-in-left" #subscribeForm="ngForm"
(ngSubmit)="subscribe(subscribeForm.value); subscribeForm.reset()">
<div class="input-group">
<input type="email" name="email" id="sub_email" class="form-control rounded-circle-left"
placeholder="Enter your email" required ngModel #email="ngModel" email>
<div class="input-group-append">
<button class="btn btn-rounded btn-dark" type="submit" id="register"
[disabled]="!subscribeForm.valid">Register</button>
</div>
</div>
</form>