Supongamos que quisiera hacer algo como ejecutar automáticamente algún código (como guardar datos en un servidor) cada vez que cambian los valores de un modelo. ¿Es la única forma de hacer esto estableciendo algo como ng-change
en cada control que posiblemente podría alterar el modelo?
Es decir, con las vistas, las cosas cambian correctamente a medida que se cambia el modelo sin tener que conectar nada explícitamente. ¿Existe una analogía con la posibilidad de ejecutar código que se guarda en un servidor? Algo como
myModel.on('change', function() {
$.post("/my-url", ...);
});
como puede ver con algo como la columna vertebral.
fuente
ng-change
ganchos en los controles de entrada sea una mejor idea?Y si necesita diseñar los elementos de su formulario de acuerdo con su estado (modificado / no modificado) dinámicamente o para probar si algunos valores realmente han cambiado, puede usar el siguiente módulo, desarrollado por mí mismo: https://github.com/betsol / entrada-angular-modificada
Agrega propiedades y métodos adicionales al formulario y sus elementos secundarios. Con él, puede probar si algún elemento contiene nuevos datos o incluso probar si todo el formulario tiene nuevos datos no guardados.
Puede configurar el siguiente reloj:
$scope.$watch('myForm.modified', handler)
y se llamará a su controlador si algunos elementos del formulario realmente contienen nuevos datos o si se invirtió al estado inicial.Además, puede usar la
modified
propiedad de elementos de formulario individuales para reducir realmente la cantidad de datos enviados a un servidor a través de una llamada AJAX. No es necesario enviar datos sin cambios.Como beneficio adicional, puede revertir su formulario al estado inicial mediante una llamada al
reset()
método del formulario .Puede encontrar la demostración del módulo aquí: http://plnkr.co/edit/g2MDXv81OOBuGo6ORvdt?p=preview
¡Salud!
fuente
<form name="myForm">
,<button ng-click="vm.doSomething(myForm)">
.FormController
a ladoSomething()
función de su controlador. Puede hacer lo que quiera con él dentro de esa función, por ejemplo, comprobar si el formulario está realmente modificado comprobando laFormController.modified
propiedad booleana.