フォームを子コンポーネントに渡し、子コンポーネントのフォームを検証します

ホイ趙

親コンポーネントに送信ボタンがあります。また、いくつかの子コンポーネントがあります。次に、検証に合格したら、ボタンを有効にして、フォームのすべての値をすべての子コンポーネントに保存します。親コンポーネントで、フォームグループを作成しました。

 public mainForm: FormGroup;

親コンポーネントのコンストラクターでは、

      constructor(private fb: FormBuilder) {
       this.mainForm = this.fb.group({
       child1Form: this.fb.group({
           projectName: [null, Validators.required],
           projectSource: [null, Validators.required]
       });
      });
     }

親htmlでは、フォームを子に渡します。

<div>
  <app-child1 [child1Form]="mainForm.controls['child1Form']"></app-child1>
</div> 

子コンポーネントhtmlでは、コードは次のとおりです。

<form [formGroup]="child1Form">
   <div>
      <input [(ngModel)]="projectName" formControlName="projectName">
   </div>
   <div>
      <input [(ngModel)]="projectSource" formControlName="projectSource">
   </div>
</form>

子コンポーネントのtsファイルでは、親コンポーネントのフォームを使用します。

 @Input() child1Form: any;

私が欲しいのはngOnInit親コンポーネントの中にあります、フォームの検証をチェックしてください。

ngOnInit() {
   this.mainForm.statusChanges.subscribe(data => {
      const f = this.mainForm.controls['child1Form'];
      if(f.valid || f.dirth)
        // do something such as enable/disable the submit button
   });
}

しかし、私の質問はstatusChanges、子コンポーネントの入力コントロールのテキストを変更しても、コードが一部に到達しなかったことです。何かを入力すると、フォームの値またはステータスが変更され、検証を実行できると思います。

snsakib

この問題を段階的に解決してみましょう。

  1. parentchildコンポーネントを作成する
  2. 次のHTMLテンプレートをparent.component.htmlに追加します
<form>
  <app-child></app-child>
  <button>Submit</button>
</form>
  1. 次のHTMLテンプレートをchild.component.htmlに追加します
<form [formGroup]="child1Form">
  <div>
    <input type="text" formControlName="projectName" required>
  </div>
  <div>
    <input type="text" formControlName="projectSource" required>
  </div>
</form>
  1. 以下のためformGroupを作成child1Formchild.component.ts(私は「child1Form」「child.component.ts」で宣言したではない「parent.component.ts」内
  child1Form: FormGroup;

  constructor(private fb: FormBuilder) { }

  ngOnInit() {
    this.child1Form = this.fb.group({
      projectName: ['', Validators.required],
      projectSource: ['', Validators.required]
    })
  }
  1. 次に、child.component.tsのstatusChanges値をサブスクライブして出力します。
  @Output() isChild1FormValid: EventEmitter<boolean> = new EventEmitter<boolean>();

  ngOnInit() {
    this.child1Form.statusChanges.subscribe(value => {
      if(value === 'VALID') {
        this.isChild1FormValid.emit(true);
      }
    });
  }
  1. parent.component.htmlで出力された値をリッスンします
<form>
  <app-child (isChild1FormValid)="enableSubmitButton($event)"></app-child>
</form>
  1. parent.component.ts内のプロパティに値を保持します
  isChild1FormValid: boolean;

  enableSubmitButton(isValid: boolean) {
    this.isChild1FormValid = isValid;
  }
  1. isChild1FormValidプロパティがtrueparent.component.html)の場合、送信ボタンを有効にします
<form>
  <button type="submit" [disabled]="!isChild1FormValid">Submit</button>
</form>
  1. StackBlitzで完全に機能するデモ

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

フォームを子コンポーネントに渡し、子コンポーネントのフォームを検証します

分類Dev

Vuelidateを使用して、親コンポーネントの子コンポーネントのフォーム入力フィールドを検証します

分類Dev

Angular 2:親コンポーネントの子コンポーネントフォームフィールドを検証します

分類Dev

メインのフォームコンポーネントを介してコンポーネントを子として渡す

分類Dev

ネストされたreactコンポーネントの子からフォームonSubmitハンドル関数に値を渡します

分類Dev

Angular2ベータ:フォームベースの親/子コンポーネントをネストし、親から検証する

分類Dev

VueJSは子コンポーネントを参照せずにデフォルトのpropを渡します

分類Dev

検証のためにフォームをAngularJSコンポーネントに渡す

分類Dev

React:送信時に子コンポーネントからフォーム値を取得します

分類Dev

子関数コンポーネントから親クラスコンポーネントにフォーム値を送信します

分類Dev

子コンポーネントと検証を備えたAngular2ネストフォーム

分類Dev

親コンポーネントから子コンポーネントのFORMIKフォームフィールド値にアクセスします-ReactJS

分類Dev

子コンポーネントからフォームからデータを取得し、それを親コンポーネントに返す方法は?

分類Dev

フォーム入力の値をReactの兄弟コンポーネントに渡します

分類Dev

親コンポーネントから子にフォームデータを渡す方法は?

分類Dev

Vuelidate:サブコンポーネントでフォームを検証します

分類Dev

エラーフォームコンポーネントにエラーを渡しますか?

分類Dev

同じフォーム名で複数のコンポーネントを使用すると、Reduxフォームの検証が失敗します

分類Dev

反応で子コンポーネントから親にフォーム値を渡す方法

分類Dev

親コンポーネントと子コンポーネントのpropTypesを検証しますか?

分類Dev

Vueフォームの送信時に子コンポーネントをトリガーする方法

分類Dev

コンポーネントを介したフォーム通信

分類Dev

フォームが子コンポーネントにある場合、親コンポーネントの送信ボタンを無効/有効にする

分類Dev

ステッパーコンポーネントの子フォームの検証

分類Dev

検証によりフォームを複数のコンポーネントに分割する

分類Dev

検証によりフォームを複数のコンポーネントに分割する

分類Dev

子コンポーネントのフォームから親コンポーネントの数値の配列に数値を追加する方法

分類Dev

Angular-子コンポーネントのリアクティブフォームと相互作用します

分類Dev

変数を子コンポーネントに渡します

Related 関連記事

  1. 1

    フォームを子コンポーネントに渡し、子コンポーネントのフォームを検証します

  2. 2

    Vuelidateを使用して、親コンポーネントの子コンポーネントのフォーム入力フィールドを検証します

  3. 3

    Angular 2:親コンポーネントの子コンポーネントフォームフィールドを検証します

  4. 4

    メインのフォームコンポーネントを介してコンポーネントを子として渡す

  5. 5

    ネストされたreactコンポーネントの子からフォームonSubmitハンドル関数に値を渡します

  6. 6

    Angular2ベータ:フォームベースの親/子コンポーネントをネストし、親から検証する

  7. 7

    VueJSは子コンポーネントを参照せずにデフォルトのpropを渡します

  8. 8

    検証のためにフォームをAngularJSコンポーネントに渡す

  9. 9

    React:送信時に子コンポーネントからフォーム値を取得します

  10. 10

    子関数コンポーネントから親クラスコンポーネントにフォーム値を送信します

  11. 11

    子コンポーネントと検証を備えたAngular2ネストフォーム

  12. 12

    親コンポーネントから子コンポーネントのFORMIKフォームフィールド値にアクセスします-ReactJS

  13. 13

    子コンポーネントからフォームからデータを取得し、それを親コンポーネントに返す方法は?

  14. 14

    フォーム入力の値をReactの兄弟コンポーネントに渡します

  15. 15

    親コンポーネントから子にフォームデータを渡す方法は?

  16. 16

    Vuelidate:サブコンポーネントでフォームを検証します

  17. 17

    エラーフォームコンポーネントにエラーを渡しますか?

  18. 18

    同じフォーム名で複数のコンポーネントを使用すると、Reduxフォームの検証が失敗します

  19. 19

    反応で子コンポーネントから親にフォーム値を渡す方法

  20. 20

    親コンポーネントと子コンポーネントのpropTypesを検証しますか?

  21. 21

    Vueフォームの送信時に子コンポーネントをトリガーする方法

  22. 22

    コンポーネントを介したフォーム通信

  23. 23

    フォームが子コンポーネントにある場合、親コンポーネントの送信ボタンを無効/有効にする

  24. 24

    ステッパーコンポーネントの子フォームの検証

  25. 25

    検証によりフォームを複数のコンポーネントに分割する

  26. 26

    検証によりフォームを複数のコンポーネントに分割する

  27. 27

    子コンポーネントのフォームから親コンポーネントの数値の配列に数値を追加する方法

  28. 28

    Angular-子コンポーネントのリアクティブフォームと相互作用します

  29. 29

    変数を子コンポーネントに渡します

ホットタグ

アーカイブ