反応型での二方向性結合
質問
Angular 2を使えば、テンプレート駆動型フォームで双方向バインディングは簡単です。バナナボックス構文を使うだけです。この動作をモデル駆動型フォームでどのように再現するのでしょうか?
例えば、ここに標準的なリアクティブフォームがあります。見た目よりもずっと複雑で、さまざまな入力やビジネスロジックがたくさんあり、テンプレート駆動型アプローチよりもモデル駆動型アプローチに適していると仮定してみましょう。
export class ExampleModel {
public name: string;
// ... lots of other inputs
}
@Component({
template: `
<form [formGroup]="form">
<input type="text" formControlName="name">
... lots of other inputs
</form>
<h4>Example values: {{example | json}}</h4>
`
})
export class ExampleComponent {
public form: FormGroup;
public example: ExampleModel = new ExampleModel();
constructor(private _fb: FormBuilder) {
this.form = this._fb.group({
name: [ this.example.name, Validators.required ]
// lots of other inputs
});
}
this.form.valueChanges.subscribe({
form => {
console.info('form values', form);
}
});
}
の中で
subscribe()
フォームの値に対してあらゆる種類のロジックを適用し、必要に応じてマッピングすることができますね。しかし、フォームからのすべての入力値をマッピングしたいわけではありません。私はただ、全体の
employee
モデル全体の値を見たいだけなのです。
[(ngModel)]="example.name"
と同じようなアプローチで、テンプレート内のjsonパイプに表示されるようにします。どうすればこれを実現できるでしょうか?
どのように解決するのですか?
<ブロッククオート注意してください。 で述べたように クラウス24 , "ngModelでReactive Fromsを使用することはangular 6で非推奨であり、angularの将来のバージョンで削除されます"。 (という記述があります(つまり、以下の回答は将来的にサポートされなくなるということです)。非推奨の理由を見るためにリンクを読み、どのような代替手段があるのかを確認してください。
を使用することができます。
[(ngModel)]
を Reactive フォームで使用することができます。
テンプレート
<form [formGroup]="form">
<input name="first" formControlName="first" [(ngModel)]="example.first"/>
<input name="last" formControlName="last" [(ngModel)]="example.last"/>
</form>
コンポーネント
export class App {
form: FormGroup;
example = { first: "", last: "" };
constructor(builder: FormBuilder) {
this.form = builder.group({
first: "",
last: ""
});
}
}
とは全く別のディレクティブになります。
を使わずに
は
formControlName
. リアクティブフォームでは、これは
FormControlNameDirective
. がない場合は
formControlName
がなければ
NgModel
ディレクティブが使われるでしょう。
関連
-
[解決済み] Angular HTMLバインディング
-
[解決済み] Angular Materialでのデフォルトのソート - ヘッダーのソート
-
[解決済み] パイプ ' ' が見つかりません。
-
[解決済み] 継承と依存性注入
-
[解決済み] 遅延のあるobservableを作成するには?
-
[解決済み] Reactive Forms - フィールドをタッチしたものとしてマークする
-
[解決済み] FormGroupとFormArrayの使い分けは?
-
[解決済み] Angular : ルートへの手動リダイレクト
-
[解決済み] ActivatedRoute(paramsなど)のobservableの購読を解除しなければならないのでしょうか?
-
[解決済み] mat-selectでデフォルトのオプションを設定する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] .tsファイルはTypeScriptのコンパイルの一部ですが、使用されていませんという警告を消すには?
-
[解決済み] Error: モジュールによってインポートされた予期しない値 'undefined'。
-
[解決済み] angular keyvalue pipe sort properties / iterate in order (アンギュラーキーバリューパイプソートプロパティ / イテレートオーダー)
-
[解決済み] ngFor を使用して、Typescript Enum を文字列の配列として反復処理するにはどうすればよいですか?
-
[解決済み] の@ViewChildのreadパラメータは何ですか?
-
[解決済み] 新しいAngularでngSrcに相当するものは何ですか?
-
[解決済み] ActivatedRoute(paramsなど)のobservableの購読を解除しなければならないのでしょうか?
-
[解決済み] angular 4 ユニットテストエラー `TypeError: ctor is not a constructor`.
-
[解決済み] mat-selectでデフォルトのオプションを設定する
-
[解決済み] Angular2 ルーターがクエリ文字列を保持する