2016-06-12 28 views
4

モデル値にテキスト入力がバインドされていますが、入力値をプログラムで変更してモデルに反映させる方法がわかりません。プログラムで入力を変更すると角度モデルが更新されない

角度範囲の外の値を更新しているため、明示的に$scope.$apply()を呼び出す必要があるが、機能していないことを理解しています。

HTML:

<input id="test_input" ng-model="test_value"> 

コントローラー:

$scope.test_value = 'abc'; // starting value 

コンソール:

$('#test_input').val('xyz'); 
$('#test_input').scope().$apply(); 
$('#test_input').scope().test_value; 
-> 'abc'; 
+0

は、なぜあなたは$直接コンソールを使用して、むしろjqueryのを使用して、それをやってscope.test_valueの値を変更していませんか? –

+0

@RahulArora - これはデモコードです。私は、input要素がプログラムで更新されているアプリケーションを持っています。モデルを登録する必要があります。 – Yarin

+0

私の答えをチェック@Yarin –

答えて

5

ngModelは「中をリッスンあなたが値を設定した後、そのイベントをトリガする必要があるので、「イベントを置く:

$('#test_input').val('xyz'); 
$('#test_input').trigger('input'); 
$('#test_input').scope().test_value; 
+0

サイドノート: 'trigger'を使うときは' $ apply() 'コールは必要ありません.jQueryを動作させるにはAngularの前にjQueryをインクルードする必要があります:https://jsfiddle.net/xj9rysy6/ –

+0

「入力」イベントで作業している場合はどうなりますか?入力を再度トリガしないと無限ループが発生しますか? – Sebastianb

+0

それから、トリガする必要はありません。あなたはそれをダイジェストするためにangleのスコープ()を呼び出すだけです –

関連する問題