J'ai une page Web qui sert d'éditeur pour une seule entité, qui se présente comme un graphe profond dans la propriété $ scope.fieldcontainer. Après avoir reçu une réponse de mon API REST (via $ resource), j'ajoute une montre à 'fieldcontainer'. J'utilise cette montre pour détecter si la page / entité est "sale". En ce moment, je fais rebondir le bouton de sauvegarde, mais je veux vraiment rendre le bouton de sauvegarde invisible jusqu'à ce que l'utilisateur salisse le modèle.
Ce que je reçois, c'est un seul déclencheur de la montre, ce qui, je pense, se produit parce que l'affectation .fieldcontainer = ... a lieu immédiatement après la création de ma montre. Je pensais simplement utiliser une propriété "dirtyCount" pour absorber la fausse alarme initiale, mais cela semble très piraté ... et j'ai pensé qu'il devait y avoir un moyen "angular idiomatic" de gérer cela - je ne suis pas le seul à l'aide d'une montre pour détecter un modèle sale.
Voici le code où je règle ma montre:
$scope.fieldcontainer = Message.get({id: $scope.entityId },
function(message,headers) {
$scope.$watch('fieldcontainer',
function() {
console.log("model is dirty.");
if ($scope.visibility.saveButton) {
$('#saveMessageButtonRow').effect("bounce", { times:5, direction: 'right' }, 300);
}
}, true);
});
Je n'arrête pas de penser qu'il doit y avoir un moyen plus propre de le faire que de protéger mon code "UI salissant" avec un "if (dirtyCount> 0)" ...
undefined
. Il a une valeur par défaut qui est nécessaire dans le cas où la mise à jour de mon modèle ne contient pas toutes les informations. Ainsi, certaines valeurs ne changent pas mais doivent se déclencher.