2017-05-19 2 views
1

私は、文字領域にバインドされた文字列変数を持つオブジェクトを持っています。 (ngModelChange)では、編集時に文字列の長さをチェックする関数があり、長すぎると実際の値に "以前の値"が割り当てられます。このように:角度2 ngModelの双方向バインディングが動作しない場合があります

t.value = t.previousValue; 

これは機能しません。私がデバッグすると、変数が割り当てられ、すべてがうまくいくように見えますが、データバインディングは更新されません。しかし、t.previousValueを "test"に変更すると、それが動作し、テキストエリアが更新されます。

t.value = "test"; 

違いは何ですか?

関連するコード:

<textarea type="text" class="form-control" [(ngModel)]="t.value" (ngModelChange)="isOverflowing(t)"></textarea> 

は次のようになります:あなたはmanaully変更イベントを設定している場合は、ngModelとバナナ・ボックスを使用しないでください

<textarea type="text" class="form-control" [(ngModel)]="t.value" (ngModelChange)="isOverflowing(t)"></textarea>

if (this.textArea.nativeElement.clientHeight < this.textArea.nativeElement.scrollHeight){ 
     if(t.value.length - t.previousValue.length > 1){ 
      t.value = t.previousValue; 
     }else{ 
      t.value = t.value.substring(0,t.value.length-2); 
     } 
    } 
    t.previousValue = t.value; 
+0

あなたはあなたのngOnChangesでこれをしたと言いますか?変更検出の途中で値が変化し続けるため、不定期の変更チェックが行われる可能性があることに注意する必要があります。 – wannadream

+0

あなたのビューとコンポーネントコードを教えていただけますか? – birwin

+0

'$ scope。$ apply()'がそれを解決するかどうか教えてください。あなたのコードは再現するのに十分ではありません! – d9ngle

答えて

1

<textarea type="text" class="form-control" [ngModel]="t.value" (ngModelChange)="isOverflowing(t)"></textarea> 

ngModelは、他のバインディングをngModelChangeに結びつけたように、今や2ではなく1方向のみをバインドすることに注意してください。

はこちらをご覧ください:

https://angular.io/docs/ts/latest/guide/template-syntax.html

+0

これは正解です。しかし、これを動作させるためには、elseステートメントを追加し、実際に問題がなければ割り当てを行う必要がありました。 –

-1
だけbeginersため

: 最初のステップ: オープンアプリ をあなたは[(ngModel)] = "入力" 機能、あなたのページには、その時間を隠すために行くを使用している場合。 '@ angular/forms'から{formModule}をインポートします。 第二段階: app.module.ts輸入のようなSAMPEページ以下を参照してください。[BrowserModule]あなたはこの輸入のようFormsModule追加してください:[BrowserModule、FormsModule]

そして今アプリを..workingあなたのアプリを実行します...

関連する問題