0
をinitalizing時に有効に設定フォーム:Angular4、私は次のコンポーネント持っ
@ViewChild('myForm') myForm: NgForm
ngAfterViewInit(): void {
this.myForm.valueChanges
.subscribe(() => {
if(this.myForm.valid) {
doSomethingWithTheFormData()
}
})
}
と私のテンプレートでは:
<form #myForm="ngForm">
...
</form>
唯一の心配は、デフォルトでmyForm.validも、true
であるということですrequired
フィールドは設定されていません。したがって、私はdoSomethingWithTheFormData()
に失敗します。 フォームの初期化が完全に完了していない場合(ngAfterViewInit()
にもかかわらず)のようです。
を私の状態で追加することで問題を回避することができましたが、これは正しい方法ではないように感じられます。
ここではモデル駆動型ではなくテンプレート駆動型を使用したい – Scipion
テンプレート駆動型フォームは、フォームコントロールのディレクティブへの作成を委任します。これらは、ツリー全体を構築するために複数のサイクルを要します。したがって、これらのコントロールのいずれかを操作する前に待機する必要があります。 ngAfterViewInitを使用すると、コントロールを検証したり値を設定する前にsetTimeoutを使用する必要があります。 –