Angular: ビュー(再)作成時にフォームバリデーターが再実行されます

作成日 2017年09月28日  ·  1コメント  ·  ソース: angular/angular

私は提出しています...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  <!-- Please search GitHub for a similar issue or PR before submitting -->
[ ] Feature request
[ ] Documentation issue or request
[ ] Support request => Please do not submit support request here, instead see https://github.com/angular/angular/blob/master/CONTRIBUTING.md#question

現在の動作

フォームコントロールに関連付けられたディレクティブがビューで作成されると、バリデーターがトリガーされます。

予想される行動

ビューが変更されたときにバリデーターをモデルでなければなりません。

指示による問題の最小限の再現

https://stackblitz.com/edit/angular-reactive-forms-issue?file=app/app.component.ts

  1. コンソールを開きます。
  2. _Toggle visiblity_ボタンを使用して、各制御ディレクティブの作成でバリデーターが実行されていることを確認します。

行動を変える動機/ユースケースは何ですか?

  1. 上記の手順から続行します。
  2. _set errors manual_を押して、エラーを手動で挿入します(これは、検証がバックエンドから返された後、手動でエラーを設定することをモックしています)
  3. _Toggle visiblity_を押して、非表示にします。 コンソールでは何も起こりません。
  4. もう一度押すと、コントロールが表示されます。 コンソールログに注意してください。これは、バリデーターが実行されていることを意味します。

エラーメッセージが消えたことを確認して


これが仕様によるものである場合、その理由はわかりません。 ビューにデータフォームモデルを書き込むビューを作成しています。 私が理解している限り、モデルから読み取るアクションはバリデーターをトリガーするべきではありません。 ご覧のとおり、モデルにFormControlインスタンスが作成されたときに、バリデーターを実行する必要があります。 _値が変更されていないのにバリデーターがトリガーされるのはなぜですか?_

環境

<br i="34"/>
Angular version: 4.3.6<br i="35"/>
<!-- Check whether this is still an issue in the most recent Angular version -->
P4 forms validators medium confirmed triage #1 bufix

最も参考になるコメント

はい、正しく聞こえます。
ビューを変更しても、リアクティブ形式のモデルに影響を与えることはなく、モデルを変更しても検証がトリガーされることはありません。

https://github.com/angular/angular/blob/17eaef0311990e1a06c028f19bc6c63dcd775f31/packages/forms/src/directives/reactive_directives/form_group_directive.ts#L98-L104にピンポイントしました

常に新しい検証実行( updateValueAndValidity() )を実行していますが、制御ディレクティブによって導入された新しいバリデーターがあった場合にのみ実行する必要があります。

また、関数の名前をaddControlDirective()すると、実行内容の混乱を減らすことができます。

どういうわけか#14376に関連している可能性があります。これは、リアクティブフォームでビューを編集することであり、 FormGroupDirectiveがあるように見えます。

>すべてのコメント

はい、正しく聞こえます。
ビューを変更しても、リアクティブ形式のモデルに影響を与えることはなく、モデルを変更しても検証がトリガーされることはありません。

https://github.com/angular/angular/blob/17eaef0311990e1a06c028f19bc6c63dcd775f31/packages/forms/src/directives/reactive_directives/form_group_directive.ts#L98-L104にピンポイントしました

常に新しい検証実行( updateValueAndValidity() )を実行していますが、制御ディレクティブによって導入された新しいバリデーターがあった場合にのみ実行する必要があります。

また、関数の名前をaddControlDirective()すると、実行内容の混乱を減らすことができます。

どういうわけか#14376に関連している可能性があります。これは、リアクティブフォームでビューを編集することであり、 FormGroupDirectiveがあるように見えます。

このページは役に立ちましたか?
0 / 5 - 0 評価