name example javascript angularjs data-binding angular-ngmodel angularjs-ng-change

javascript - example - Angular: ng-change no se dispara cuando se cambia ng-model



ng model dynamic name angular 4 (4)

La expresión https://docs.angularjs.org/api/ng/directive/ngChange solo se evalúa cuando un cambio en el valor de entrada hace que se https://docs.angularjs.org/api/ng/directive/ngChange un nuevo valor en el modelo.

No será evaluado:

  • si el valor devuelto por la tubería de transformación $parsers no ha cambiado
  • Si la entrada sigue siendo inválida ya que el modelo permanecerá nulo.
  • Si el modelo se cambia mediante programación y no por un cambio en el valor de entrada

Intente crear un observador utilizando $scope.$watch $watch(watchExpression, listener, [objectEquality]); - $watch(watchExpression, listener, [objectEquality]);

Ejemplo

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

La entrada es la siguiente:

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

La action() se ejecuta cuando escribo manualmente y cambio la entrada. Sin embargo, si cambio el valor de repair.test por alguna otra función mediante programación, no se activará la acción de ng-change. He leído el tutorial angular y probablemente sea el comportamiento esperado.

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

"La expresión no se evalúa cuando el cambio de valor proviene del modelo". <- Necesito esto también. ¿Cómo puedo disparar una acción en el controlador, cuando el modelo cambia de alguna manera? (escribiendo en entrada o por cualquier otra función)

Gracias por la ayuda.

Editar:

El valor del modelo es en realidad el form.$valid , que tiene su propio controlador de Formulario a su alrededor (creo), es por eso que utilicé la función de acción para intentar pasar el valor al controlador principal. Así que $scope.$watch en este momento no funciona, solo cuando se inicializa.


Otra solución sería usar una directiva que vigilara el modelo en busca de cambios en lugar de usar ng-change .

app.directive(''onModelChange'', function($parse){ return { restrict: "A", require: "?ngModel", link: function(scope, elem, attrs, ctrl) { scope.$watch(attrs[''ngModel''], function (newValue, oldValue) { if (typeof(newValue) === "undefined" || newValue == oldValue) { return; } var changeExpr = $parse(attrs[''onModelChange'']); if (changeExpr) { changeExpr(scope); } }); } }; });

Entonces lo usarías así:

<input class="value" type="text" ng-model="myVar" on-model-change="doSomething(myVar)"/>


Puedes usar una función de observador en tu controlador

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