私は、プロセス全体をキャンセルするための「取り消し」ボタンを含むデータ収集コンポーネントを持っています。問題は、Angular 2バリデータで検証されたHTML入力フィールドの一部にフォーカスがあり、有効ではなく、キャンセルボタンを押すと、コンポーネントが削除されないということです。代わりに、バリデーターが起動し、キャンセルボタンの押下は無視されます。コンポーネントを消すために、バリデータが不平を言った後、もう一度押してください。キャンセルボタン自体は、単にコンポーネントからのルーティングをトリガーします。関連コード:角2のフォームバリデーターにキャンセルボタンがついています
component.html
<form [formGroup]="addReminderForm" (ngSubmit)="onSubmit(addReminderForm.value)">
<input type="text" [formControl]="addReminderForm.controls['text']" />
<div class="error" *ngIf="addReminderForm.controls['text'].hasError('required') &&
addReminderForm.controls['text'].touched">You must enter reminder text</div>
<button type="submit" [disabled]="!addReminderForm.valid" >Add Reminder</button>
</form>
<button (click)="cancel()">Cancel</button>
component.ts:
ngOnInit() {
this.addReminderForm = this.fb.group({
'text': ['', Validators.compose([Validators.required, Validators.maxLength(20)])]
});
}
cancel() {
// Simply navigate back to reminders view
this.router.navigate(['../'], { relativeTo: this.route }); // Go up to parent route
}
私はこれがなぜ起こるかわかりません。何か案は?
あなたのコンポーネントクラスで<form [formGroup]="heroForm" (ngSubmit)="onSubmit()" novalidate>
...
<div>
<button type="submit" [disabled]="heroForm.pristine">Save</button>
<button type="reset" (click)="revert()"[disabled]="heroForm.pristine">Revert o Cancel</button>
</div>
</form>
:
同様の問題を示す同じ問題は、キャンセルボタン付きのModalフォームで発生します。https://stackoverflow.com/questions/46411390/angular-form-validation-activated-before-cancel-button-is-triggered?rq= 1 – rmcsharry
ありがとう、私はその質問に気づいた。私がこの問題について考えるとき、私のフォームは実際にはぼかしイベントのハンドラを持っていました。これは、ぼかしの入力フィールドをトリムしました。これが原因かどうか疑問に思う? –
いいえ、それは原因ではありません。原因は、ぼやけが発生するとすぐにフォームの検証が行われることです。キャンセルクリックが登録される前に起こります。私はそれを解決する方法の答えを投稿します。 – rmcsharry