Eu tenho algum componente angular 2 simples com modelo. Como limpar o formulário e todos os campos após o envio ?. Não consigo recarregar a página. Depois de definir os dados com o date.setValue('')
campo ainda 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
}
}
loading-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>
fonte
pristine
, ..., então reconstruir o formulário é atualmente a única opção.setValue()
método de controle. ApenasupdateValue()
github.com/angular/angular/blob/master/modules/angular2/src/…A partir do Angular2 RC5,
myFormGroup.reset()
parece funcionar.fonte
Para redefinir seu formulário após o envio, você pode simplesmente invocar
this.form.reset()
. Ao ligarreset()
:Encontre esta solicitação de pull para uma resposta detalhada. Para sua informação, este PR já foi mesclado com o 2.0.0.
Esperançosamente, isso pode ser útil e me avise se você tiver outras perguntas em relação ao Formulários Angular2.
fonte
Faça uma chamada
clearForm();
em seu arquivo .tsTente como o exemplo de trecho de código abaixo para limpar os dados do formulário.
fonte
fonte
Aqui está como faço isso no Angular 7.3
Não havia necessidade de ligar
form.clearValidators()
fonte
É assim que faço Angular 8:
Obtenha uma referência local do seu formulário:
<form name="myForm" #myForm="ngForm"></form>
@ViewChild('myForm', {static: false}) myForm: NgForm;
E sempre que você precisar redefinir o formulário, chame o
resetForm
método:this.myForm.resetForm();
Você precisará
FormsModule
de@angular/forms
para que funcione. Certifique-se de adicioná-lo às suas importações de módulo.fonte
@ViewChild
no Angular 8 precisa de 2 argumentos.@ViewChild('myForm', {static: false}) myForm: NgForm;
Para o angular versão 4, você pode usar isto:
Mas, você pode precisar de um valor inicial como:
É importante resolver o problema de nulos em sua referência de objeto.
link de referência , Pesquise "redefinir os sinalizadores de formulário".
fonte
Há uma nova discussão sobre isso ( https://github.com/angular/angular/issues/4933 ). Até agora, existem apenas alguns hacks que permitem limpar o formulário, como recriar todo o formulário após o envio: https://embed.plnkr.co/kMPjjJ1TWuYGVNlnQXrU/
fonte
Encontrei outra solução. É um pouco hacky, mas está amplamente disponível no mundo angular2.
Visto que a diretiva * ngIf remove o formulário e o recria, pode-se simplesmente adicionar um * ngIf ao formulário e ligá-lo a algum tipo de
formSuccessfullySent
variável. => Isso irá recriar o formulário e, portanto, redefinir os status de controle de entrada.Claro, você também deve limpar as variáveis do modelo. Achei conveniente ter uma classe de modelo específica para meus campos de formulário. Desta forma, posso redefinir todos os campos tão simples quanto criar uma nova instância desta classe de modelo. :)
fonte
querySelectorAll
emngAfterViewInit
. Eu uso esta lista para enfocar o próximo elemento de entrada em keydown.enter, em vez de enviar o formulário. Esta lista quebra ao usar ngIf para reinicializar o formulário. :(Hm, agora (23 de janeiro de 2017 com angular 2.4.3) fiz funcionar assim:
fonte
O código abaixo funciona para mim no Angular 4
fonte
this.myForm.reset ();
Isso é tudo o suficiente ... Você pode obter a saída desejada
fonte
Para redefinir o formulário completo após o envio, você pode usar reset () no Angular. O exemplo a seguir é implementado em Angular 8. Abaixo está um formulário de inscrição, no qual estamos recebendo e-mail como entrada.
Consulte o documento oficial: https://angular.io/guide/forms#show-and-hide-validation-error-messages .
fonte
fonte
object
vazio e não oform
.