Подтвердить что ты не робот

Angular - ng-change не срабатывает при изменении ng-модели

Ввод следующий:

<input type="text" ng-model="repair.test"  ng-change="action()" />

action() выполняется при вводе и изменении ввода вручную. Однако, если я изменяю значение repair.test какой-либо другой функцией программно, он не запускает действие ng-change. Я прочитал учебник angular, и это, вероятно, ожидаемое поведение.

https://docs.angularjs.org/api/ng/directive/ngChange

"Выражение не оценивается, когда изменение стоимости происходит от модели". Мне тоже нужно это. Как я могу запустить действие в контроллере, когда модель каким-то образом изменится? (ввод ввода или любой другой функцией)

Спасибо за помощь.

Edit:

Значение модели на самом деле является form.$valid, у которого есть собственный контроллер формы вокруг него (я думаю), поэтому я использовал функцию действия, чтобы попытаться передать значение родительскому контроллеру. Поэтому $scope.$watch в данный момент не работает, только когда он инициализирован.

4b9b3361

Ответ 1

ngChange предназначен только для ввода, если вы хотите прослушать модель, сделайте это

$scope.$watch('repair.test', function(newvalue,oldvalue) {

            });

Ответ 2

ngChange выражение оценивается только тогда, когда изменение входного значения вызывает привязку нового значения к модели.

Будет оцениваться не:

  • если значение, возвращаемое конвейером преобразования $parsers, имеет не изменено
  • если вход продолжает оставаться недействительным, поскольку модель останется null
  • , если модель изменена программно, а не измените на входное значение

Попробуйте создать наблюдателя, используя $scope. $watch - $watch(watchExpression, listener, [objectEquality]);

Пример

$scope.$watch('repair.test', function(newValue, oldValue) {
    // ...
});

Ответ 3

Вы можете использовать функцию watcher в контроллере

$scope.$watch('repair.test', function() {
    $scope.action();
});