2016-12-30 11 views
1

せずに、私は以下のhtmlを持って動作しません:Angular2フォーム変数はngModel

<form #f="ngForm"> 
    <input type="text" name="dd" value="abc" (change)="foof(f.form.value)"/> 
</form> 

しかし、f.form.valueはfoof機能は、私が入力されたテキスト値を変更したときに呼び出されたときに、その中には何もありません。 私は

<input type="text" name="dd" [ngModel]="abc" (change)="foof(f.form.value)"/> 

、以下のように入力要素にngModelを追加する場合にのみ、その後f.form.valueはDD入力テキスト値を持っています。 なぜこれが分かりませんか?フォーム変数を正しく動作させるには、ngModelを使用する必要がありますか?

注:私たちのアプリでは、特定の理由から、dd入力が変更されたときにフォーム全体を提出しなければならないので、foof(f.form.value)が必要です。私はまた、モデルとhtmlレイアウトの間のバリエーションのために、双方向バインディング、片方向バインディングを望んでいません。

答えて

1

は、私はあなたが作ることができると思います。このようなハック:

<form #f="ngForm"> 
    <input type="text" id="someInput" value="abc" (change)="foof()"/> 
</form> 

x:any; 

foof() { 
    this.x = document.getElementById("someInput"); 
    console.log(this.x.value); 
} 

あなたのアプリを知りませんだから、この(ひどい)ハックは、あなたのニーズに全く合わないかもしれません。

+0

ありがとう!!これはこの問題を解決し、複数のコンポーネントにわたってフォームを分散させ、反応型フォームを使用せずにテンプレート駆動型フォームを使用しなければならないという問題を解決しました。 javascriptを使用すると、それも可能になりました! – vanval

+0

素晴らしい!お役に立てて嬉しいです! :) – Alex

0

これは入力フィールドにバインドする方法ではないと思います。

あなたはこのようにそれをやるべき

<input type="text" name="dd" [(ngModel)]="abc" (ngModelChange)="foof(abc)"/> 
+0

私たちのアプリでは、dd入力が変更されたときにフォーム全体を提出する必要があるので、foof(f.form.value)が必要です。私はまた、モデルとhtmlレイアウトの間のバリエーションのために、双方向バインディング、片方向バインディングを望んでいません。 – vanval

関連する問題