2つの違いは何ですか:
<form #form="ngForm">
と
<form [ngFormModel]="form">
いつどちらを使用しますか?
2つの違いは何ですか:
<form #form="ngForm">
と
<form [ngFormModel]="form">
いつどちらを使用しますか?
最初の戦略は「テンプレート駆動型」フォームです。Angular は暗黙的なディレクティブをフォームに追加し、バリデーターをほとんど宣言的にテンプレートに追加するため、「テンプレート駆動型」という名前が付けられます。たとえば、フィールドが必須であることを示すバリデータを追加する方法は次のとおりです。
<form #form="ngForm">
<input name="firstName" required [(ngModel)]="formModel">
</form>
ここでは、required 属性を使用しており、Angular は暗黙的なディレクティブを介して必要な Validator を構成しています。このタイプのフォームは ng-model での使用に非常に適しており、Angular 1 フォームを Angular 2 に移行するのに理想的です。
2 番目の戦略は、「モデル駆動型」のフォームです。ここでは、テンプレートでバリデーターを宣言せず、代わりにコントロール名を宣言します。
<form [formGroup]="form">
<input name="firstName" formControlName="firstName">
</form>
次に、すべての検証ロジックは、テンプレートではなくコードを介して宣言されます。また、フォームを Observable としてサブスクライブし、関数型リアクティブ プログラミング手法を使用することもできます。例えば:
@Component({
selector: "some-component",
templateUrl: 'model-driven-form.html'
})
export class ModelDrivenForm {
form: FormGroup;
firstName = new FormControl ("", Validators.required);
constructor(fb: FormBuilder) {
this.form = fb.group({
"firstName":["", Validators.required]
});
this.form.valueChanges
.subscribe((formValue) => {
console.log(formValue);
});
}
}
これも動作しNgModel
ますが、フォーム コントロールを介してフォームの値を既に取得できるため、これは必要ありません。
したがって、両方のどちらを選択するかは、ユースケースに大きく依存します。
formGroup
オプション 2を検討してください。formGroup
試してみてください。非常に強力です。PS Angular2 の新しいフォームの詳細については、こちらを参照してください。