2016-06-12 3 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

Почему вы не изменяете значение $ scope.test_value напрямую с помощью консоли и, скорее, выполняете его с помощью jquery? –

+0

@RahulArora - это демонстрационный код. У меня есть приложение, в котором элемент ввода обновляется программно, и я хочу, чтобы модель зарегистрировала это. – Yarin

+0

Проверьте мой ответ @Yarin –

ответ

5

ngModel прослушивает «inpu t ", поэтому вам нужно запустить это событие после установки значения:

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

Примечание: вам не нужен вызов '$ apply()' при использовании 'trigger', а jQuery должен быть включен до Angular для его работы: https://jsfiddle.net/xj9rysy6/ –

+0

Что делать, если я работаю над событием ввода? не приведет к повторному запуску входа, вызовет бесконечный цикл? – Sebastianb

+0

, тогда вам не нужно запускать его, вам просто нужно вызвать область() для углового, чтобы переварить ее –

Смежные вопросы