Angular 2 フォーム: Reactive Forms と patchValue() でクリア
Angular 2 でフォーム送信後にフォームをクリアする方法
Angular 2 フォーム送信後にフォームをクリアするには、いくつかの方法があります。
reset() メソッドを使用する
最も簡単な方法は、reset()
メソッドを使用することです。これは、フォーム内のすべてのフィールドをデフォルト値にリセットします。
this.myForm.reset();
例
<form #myForm (ngSubmit)="onSubmit()">
<input type="text" name="firstName" [(ngModel)]="firstName">
<input type="text" name="lastName" [(ngModel)]="lastName">
<button type="submit">送信</button>
</form>
@Component({
selector: 'app-root',
template: `
<form #myForm (ngSubmit)="onSubmit()">
<input type="text" name="firstName" [(ngModel)]="firstName">
<input type="text" name="lastName" [(ngModel)]="lastName">
<button type="submit">送信</button>
</form>
`,
})
export class AppComponent {
firstName = '';
lastName = '';
onSubmit() {
// フォームを送信する
console.log('Form submitted:', this.firstName, this.lastName);
// フォームをクリアする
this.myForm.reset();
}
}
FormGroup
メソッドを使用して、個々のフィールドをクリアすることもできます。
this.myForm.controls['firstName'].setValue('');
this.myForm.controls['lastName'].setValue('');
<form #myForm (ngSubmit)="onSubmit()">
<input type="text" name="firstName" [(ngModel)]="firstName">
<input type="text" name="lastName" [(ngModel)]="lastName">
<button type="submit">送信</button>
</form>
@Component({
selector: 'app-root',
template: `
<form #myForm (ngSubmit)="onSubmit()">
<input type="text" name="firstName" [(ngModel)]="firstName">
<input type="text" name="lastName" [(ngModel)]="lastName">
<button type="submit">送信</button>
</form>
`,
})
export class AppComponent {
firstName = '';
lastName = '';
onSubmit() {
// フォームを送信する
console.log('Form submitted:', this.firstName, this.lastName);
// フォームをクリアする
this.myForm.controls['firstName'].setValue('');
this.myForm.controls['lastName'].setValue('');
}
}
Reactive Forms と patchValue() メソッドを使用する
Reactive Forms
を使用している場合は、patchValue()
メソッドを使用して、フォーム内の特定のフィールドのみをクリアすることができます。
this.myForm.patchValue({
firstName: '',
lastName: '',
});
<form [formGroup]="myForm" (ngSubmit)="onSubmit()">
<input type="text" formControlName="firstName">
<input type="text" formControlName="lastName">
<button type="submit">送信</button>
</form>
@Component({
selector: 'app-root',
template: `
<form [formGroup]="myForm" (ngSubmit)="onSubmit()">
<input type="text" formControlName="firstName">
<input type="text" formControlName="lastName">
<button type="submit">送信</button>
</form>
`,
})
export class AppComponent {
myForm = new FormGroup({
firstName: new FormControl(''),
lastName: new FormControl(''),
});
onSubmit() {
// フォームを送信する
console.log('Form submitted:', this.myForm.value);
// フォームをクリアする
this.myForm.patchValue({
firstName: '',
lastName: '',
});
}
}
ViewChild
ディレクティブと nativeElement
プロパティを使用して、フォーム要素に直接アクセスし、reset()
メソッドを呼び出すこともできます。
@ViewChild('myForm
サンプルコード: Angular 2 でフォーム送信後にフォームをクリアする方法
reset() メソッドを使用する
<form #myForm (ngSubmit)="onSubmit()">
<input type="text" name="firstName" [(ngModel)]="firstName">
<input type="text" name="lastName" [(ngModel)]="lastName">
<button type="submit">送信</button>
</form>
@Component({
selector: 'app-root',
template: `
<form #myForm (ngSubmit)="onSubmit()">
<input type="text" name="firstName" [(ngModel)]="firstName">
<input type="text" name="lastName" [(ngModel)]="lastName">
<button type="submit">送信</button>
</form>
`,
})
export class AppComponent {
firstName = '';
lastName = '';
onSubmit() {
// フォームを送信する
console.log('Form submitted:', this.firstName, this.lastName);
// フォームをクリアする
this.myForm.reset();
}
}
FormGroup メソッドを使用する
<form #myForm (ngSubmit)="onSubmit()">
<input type="text" name="firstName" [(ngModel)]="firstName">
<input type="text" name="lastName" [(ngModel)]="lastName">
<button type="submit">送信</button>
</form>
@Component({
selector: 'app-root',
template: `
<form #myForm (ngSubmit)="onSubmit()">
<input type="text" name="firstName" [(ngModel)]="firstName">
<input type="text" name="lastName" [(ngModel)]="lastName">
<button type="submit">送信</button>
</form>
`,
})
export class AppComponent {
firstName = '';
lastName = '';
onSubmit() {
// フォームを送信する
console.log('Form submitted:', this.firstName, this.lastName);
// フォームをクリアする
this.myForm.controls['firstName'].setValue('');
this.myForm.controls['lastName'].setValue('');
}
}
Reactive Forms と patchValue() メソッドを使用する
<form [formGroup]="myForm" (ngSubmit)="onSubmit()">
<input type="text" formControlName="firstName">
<input type="text" formControlName="lastName">
<button type="submit">送信</button>
</form>
@Component({
selector: 'app-root',
template: `
<form [formGroup]="myForm" (ngSubmit)="onSubmit()">
<input type="text" formControlName="firstName">
<input type="text" formControlName="lastName">
<button type="submit">送信</button>
</form>
`,
})
export class AppComponent {
myForm = new FormGroup({
firstName: new FormControl(''),
lastName: new FormControl(''),
});
onSubmit() {
// フォームを送信する
console.log('Form submitted:', this.myForm.value);
// フォームをクリアする
this.myForm.patchValue({
firstName: '',
lastName: '',
});
}
}
ViewChild ディレクティブと nativeElement プロパティを使用する
<form #myForm (ngSubmit)="onSubmit()">
<input type="text" name="firstName" [(ngModel)]="firstName">
<input type="text" name="lastName" [(ngModel)]="lastName">
<button type="submit">送信</button>
</form>
@Component({
selector: 'app-root',
template: `
<form #myForm (ngSubmit)="onSubmit()">
<input type="text" name="firstName" [(ngModel)]="firstName">
<input type="text" name="lastName" [(ngModel)]="lastName">
<button type="submit">送信</button>
</form>
`,
})
export class AppComponent {
@ViewChild('myForm') myForm: ElementRef;
firstName = '';
lastName = '';
onSubmit() {
// フォームを送信する
console.log('
Angular 2 でフォーム送信後にフォームをクリアする方法:その他
ngSubmit
イベントで event.preventDefault()
を使用して、フォーム送信をデフォルトで阻止し、代わりにコードでフォームをクリアすることができます。
<form (ngSubmit)="onSubmit($event)">
<input type="text" name="firstName" [(ngModel)]="firstName">
<input type="text" name="lastName" [(ngModel)]="lastName">
<button type="submit">送信</button>
</form>
@Component({
selector: 'app-root',
template: `
<form (ngSubmit)="onSubmit($event)">
<input type="text" name="firstName" [(ngModel)]="firstName">
<input type="text" name="lastName" [(ngModel)]="lastName">
<button type="submit">送信</button>
</form>
`,
})
export class AppComponent {
firstName = '';
lastName = '';
onSubmit(event: Event) {
// フォーム送信をデフォルトで阻止
event.preventDefault();
// フォームを送信する
console.log('Form submitted:', this.firstName, this.lastName);
// フォームをクリアする
this.myForm.reset();
}
}
カスタムディレクティブを作成して、フォーム送信後にフォームをクリアするロジックをカプセル化することができます。
@Directive({
selector: '[appClearForm]',
})
export class ClearFormDirective {
constructor(private form: ElementRef) {}
@HostListener('ngSubmit')
onSubmit() {
this.form.nativeElement.reset();
}
}
<form #myForm (ngSubmit)="onSubmit()">
<input type="text" name="firstName" [(ngModel)]="firstName">
<input type="text" name="lastName" [(ngModel)]="lastName">
<button type="submit">送信</button>
</form>
reset()
メソッドを使用するFormGroup
メソッドを使用するReactive Forms
とpatchValue()
メソッドを使用するViewChild
ディレクティブとnativeElement
プロパティを使用するngSubmit
イベントでevent.preventDefault()
を使用する- カスタムディレクティブを作成する
どの方法が最適かは、プロジェクトの要件と開発者の好みによって異なります。
angular angular2-forms