Suponha que eu queira fazer algo como executar algum código automaticamente (como salvar dados em um servidor) sempre que os valores de um modelo mudam. A única maneira de fazer isso é definir algo como ng-change
em cada controle que poderia alterar o modelo?
Ou seja, com as visualizações, as coisas mudam conforme o modelo é alterado, sem a necessidade de conectar nada explicitamente. Existe uma analogia com a capacidade de executar um código que salva em um servidor? Algo como
myModel.on('change', function() {
$.post("/my-url", ...);
});
como você pode ver com algo como backbone.
fonte
ng-change
ganchos (potencialmente múltiplos) em controles de entrada uma ideia melhor?E se você precisar estilizar seus elementos de formulário de acordo com seu estado (modificado / não modificado) dinamicamente ou para testar se alguns valores realmente mudaram, você pode usar o seguinte módulo, desenvolvido por mim: https://github.com/betsol / angular-input-modificado
Ele adiciona propriedades e métodos adicionais ao formulário e aos seus elementos filhos. Com ele, você pode testar se algum elemento contém novos dados ou até mesmo testar se todo o formulário possui novos dados não salvos.
Você pode configurar o seguinte relógio:
$scope.$watch('myForm.modified', handler)
e seu manipulador será chamado se alguns elementos do formulário realmente contiverem novos dados ou se forem revertidos para o estado inicial.Além disso, você pode usar a
modified
propriedade de elementos de formulário individuais para realmente reduzir a quantidade de dados enviados a um servidor por meio de chamada AJAX. Não há necessidade de enviar dados inalterados.Como um bônus, você pode reverter seu formulário ao estado inicial por meio da chamada ao
reset()
método do formulário .Você pode encontrar a demonstração do módulo aqui: http://plnkr.co/edit/g2MDXv81OOBuGo6ORvdt?p=preview
Felicidades!
fonte
<form name="myForm">
,<button ng-click="vm.doSomething(myForm)">
.FormController
para adoSomething()
função do seu controlador. Você pode fazer o que quiser com ele dentro dessa função, por exemplo, verificar se o formulário foi realmente modificado verificando aFormController.modified
propriedade booleana.