Supposons que je veuille faire quelque chose comme exécuter automatiquement du code (comme enregistrer des données sur un serveur) chaque fois que les valeurs d'un modèle changent. Est-ce que le seul moyen de le faire est de définir quelque chose comme ng-change
sur chaque commande qui pourrait éventuellement modifier le modèle?
C'est-à-dire qu'avec les vues, les choses changent à mesure que le modèle est modifié sans avoir à connecter explicitement quoi que ce soit. Existe-t-il un analogue à la capacité d'exécuter du code qui enregistre sur un serveur? Quelque chose comme
myModel.on('change', function() {
$.post("/my-url", ...);
});
comme vous pourriez le voir avec quelque chose comme backbone.
la source
ng-change
crochets sur les contrôles d'entrée une meilleure idée?Et si vous avez besoin de styliser vos éléments de formulaire en fonction de leur état (modifié / non modifié) de manière dynamique ou pour tester si certaines valeurs ont réellement changé, vous pouvez utiliser le module suivant, développé par moi-même: https://github.com/betsol / angular-input-modified
Il ajoute des propriétés et des méthodes supplémentaires au formulaire et à ses éléments enfants. Avec lui, vous pouvez tester si un élément contient de nouvelles données ou même tester si tout le formulaire contient de nouvelles données non enregistrées.
Vous pouvez configurer la montre suivante:
$scope.$watch('myForm.modified', handler)
et votre gestionnaire sera appelé si certains éléments du formulaire contiennent réellement de nouvelles données ou s'il est retourné à son état initial.En outre, vous pouvez utiliser la
modified
propriété d'éléments de formulaire individuels pour réduire réellement la quantité de données envoyées à un serveur via un appel AJAX. Il n'est pas nécessaire d'envoyer des données inchangées.En prime, vous pouvez rétablir votre formulaire à son état initial via un appel au formulaire.
reset()
méthode .Vous pouvez trouver la démo du module ici: http://plnkr.co/edit/g2MDXv81OOBuGo6ORvdt?p=preview
À votre santé!
la source
<form name="myForm">
,<button ng-click="vm.doSomething(myForm)">
.FormController
à ladoSomething()
fonction de votre contrôleur. Vous pouvez faire tout ce que vous voulez avec cette fonction à l'intérieur de cette fonction, par exemple vérifier si le formulaire est réellement modifié en vérifiant laFormController.modified
propriété booléenne.