6

I have a text input bound to a model value, but I can't figure out how to change the input value programmatically and have the change propagate to the model.

I understand that because I'm updating the value external to the angular scope that I need to explicitly call $scope.$apply(), but it's not working.

HTML:

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

Controller:

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

Console:

$('#test_input').val('xyz');
$('#test_input').scope().$apply();
$('#test_input').scope().test_value;
-> 'abc';
Yarin
  • 173,523
  • 149
  • 402
  • 512

1 Answers1

7

ngModel listens for "input" event, so you need to trigger that event after setting the value:

$('#test_input').val('xyz');
$('#test_input').trigger('input'); 
$('#test_input').scope().test_value;
Rahul Arora
  • 4,503
  • 1
  • 16
  • 24
  • Side note: You do not need the `$apply()` call when using `trigger`, and jQuery has to be included before Angular in order for it to work: https://jsfiddle.net/xj9rysy6/ – Patrick Evans Jun 12 '16 at 19:37
  • What if I'm working in an 'input' event? wouldn't triggering the input again cause an infinite loop? – Sebastianb Nov 17 '16 at 12:36
  • then you dont need to trigger it, you just need to call the scope() for angular to digest it – Rahul Arora Nov 18 '16 at 04:13