mas*_*owo 63 angular2-forms angular
我有一些简单的角度2组件与模板.提交后如何清除表格和所有字段?我无法重新加载页面.用date.setValue('')字段设置数据后是stil touched.
import {Component} from 'angular2/core';
import {FORM_DIRECTIVES, FormBuilder, ControlGroup, Validators, Control} from 'angular2/common';
@Component({
selector: 'loading-form',
templateUrl: 'app/loadings/loading-form.component.html',
directives: [FORM_DIRECTIVES]
})
export class LoadingFormComponent {
private form:ControlGroup;
private date:Control;
private capacity:Control;
constructor(private _loadingsService:LoadingsService, fb:FormBuilder) {
this.date = new Control('', Validators.required);
this.capacity = new Control('', Validators.required);
this.form = fb.group({
'date': this.date,
'capacity': this.capacity
});
}
onSubmit(value:any):void {
//send some data to backend
}
}
Run Code Online (Sandbox Code Playgroud)
装载-form.component.html
<div class="card card-block">
<h3 class="card-title">Loading form</h3>
<form (ngSubmit)="onSubmit(form.value)" [ngFormModel]="form">
<fieldset class="form-group" [class.has-danger]="!date.valid && date.touched">
<label class="form-control-label" for="dateInput">Date</label>
<input type="text" class="form-control form-control-danger form-control-success" id="dateInput"
min="0" placeholder="Enter loading date"
[ngFormControl]="form.controls['date']">
</fieldset>
<fieldset class="form-group" [class.has-danger]="!capacity.valid && capacity.touched">
<label class="form-control-label" for="capacityInput">Capacity</label>
<input type="number" class="form-control form-control-danger form-control-success" id="capacityInput"
placeholder="Enter capacity"
[ngFormControl]="form.controls['capacity']">
</fieldset>
<button type="submit" class="btn btn-primary" [disabled]="!form.valid">Submit
</button>
</form>
</div>
Run Code Online (Sandbox Code Playgroud)
Gün*_*uer 106
另请参阅https://angular.io/docs/ts/latest/guide/reactive-forms.html("重置表单标志"部分)
> = RC.6
在RC.6中,应该支持更新表单模型.创建新表单组并分配给myForm
[formGroup]="myForm"
Run Code Online (Sandbox Code Playgroud)
也将得到支持(https://github.com/angular/angular/pull/11051#issuecomment-243483654)
> = RC.5
form.reset();
Run Code Online (Sandbox Code Playgroud)
在新表单模块(> = RC.5)中NgForm有一个reset()方法,并且还支持表单reset事件.
https://github.com/angular/angular/blob/6fd5bc075d70879c487c0188f6cd5b148e72a4dd/modules/%40angular/forms/src/directives/ng_form.ts#L179
<= RC.3
这将有效:
onSubmit(value:any):void {
//send some data to backend
for(var name in form.controls) {
(<Control>form.controls[name]).updateValue('');
/*(<FormControl>form.controls[name]).updateValue('');*/ this should work in RC4 if `Control` is not working, working same in my case
form.controls[name].setErrors(null);
}
}
Run Code Online (Sandbox Code Playgroud)
也可以看看
Mau*_*rez 12
这是我在 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) ;
});
}
Run Code Online (Sandbox Code Playgroud)
没有必要打电话 form.clearValidators()
import {Component} from '@angular/core';
import {NgForm} from '@angular/forms';
@Component({
selector: 'example-app',
template: '<form #f="ngForm" (ngSubmit)="onSubmit(f)" novalidate>
<input name="first" ngModel required #first="ngModel">
<input name="last" ngModel>
<button>Submit</button>
</form>
<p>First name value: {{ first.value }}</p>
<p>First name valid: {{ first.valid }}</p>
<p>Form value: {{ f.value | json }}</p>
<p>Form valid: {{ f.valid }}</p>',
})
export class SimpleFormComp {
onSubmit(f: NgForm) {
// some stuff
f.resetForm();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我在 Angular 8 中的做法:
获取表单的本地参考:
<form name="myForm" #myForm="ngForm"></form>
Run Code Online (Sandbox Code Playgroud)
@ViewChild('myForm', {static: false}) myForm: NgForm;
Run Code Online (Sandbox Code Playgroud)
每当您需要重置表单时,请调用resetForm方法:
this.myForm.resetForm();
Run Code Online (Sandbox Code Playgroud)
您将需要FormsModule从@angular/forms它的工作。请务必将其添加到您的模块导入中。
小智 8
clearForm();在您的.ts文件中拨打电话
尝试像下面的示例代码片段一样清除表单数据。
clearForm() {
this.addContactForm.reset({
'first_name': '',
'last_name': '',
'mobile': '',
'address': '',
'city': '',
'state': '',
'country': '',
'zip': ''
});
}
Run Code Online (Sandbox Code Playgroud)
对于角度版本4,您可以使用:
this.heroForm.reset();
Run Code Online (Sandbox Code Playgroud)
但是,您可能需要一个初始值,如:
ngOnChanges() {
this.heroForm.reset({
name: this.hero.name, //Or '' to empty initial value.
address: this.hero.addresses[0] || new Address()
});
}
Run Code Online (Sandbox Code Playgroud)
在对象引用中解决null问题很重要.
参考链接,搜索"重置表单标志".
| 归档时间: |
|
| 查看次数: |
145953 次 |
| 最近记录: |