Comment puis-je ignorer le chargement initial lors de l'observation des changements de modèle dans AngularJS?

J'ai une page web qui sert de l'éditeur pour une seule entité, qui se trouve comme un graphe dans le $scope.fieldcontainer de la propriété. Après je reçois une réponse de mon API REST (via $ressource), j'ajoute une montre pour 'fieldcontainer'. J'utilise cette montre pour détecter si la page/l'entité est "sale". Droit maintenant, je suis en train de faire le bouton enregistrer de rebond, mais je veux réellement faire le bouton enregistrer invisible jusqu'à ce que l'utilisateur souillures du modèle.

Ce que je reçois est d'un seul déclencheur de la montre, je pense que c'est dû au fait que l' .fieldcontainer = ... cession a lieu immédiatement après que j'ai créer ma montre. Je pensais simplement à l'aide d'un "dirtyCount" propriété d'absorber la première fausse alarme, mais qui se sent très hacky ... et j'ai pensé, il y a un "Angulaire idiomatiques" façon de traiter avec cela - je ne suis pas le seul à l'aide d'une montre pour détecter un sale modèle.

Voici le code où j'ai mis 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 viens de continuer à penser qu'il y a obtenu d'être d'une façon plus propre de faire cela que garde de mon "UI salir" code "si (dirtyCount >0)"...

J'ai aussi besoin d'être en mesure de recharger $champ d'application.fieldcontainer basé sur certains boutons (par exemple, le chargement d'une version précédente de l'entité). Pour cela, j'aurais besoin de suspendre la montre, recharger, puis reprendre la montre.
Envisagez-vous de changer ma réponse à la accepté de répondre? Ceux qui prennent le temps de lire tout le chemin jusqu'à il plutôt d'accord que c'est la bonne solution.
J'ai le même OP problème, mais dans mon cas, votre réponse ne fonctionne pas, parce que mon ancienne valeur n'est pas undefined. Il a une valeur par défaut qui est nécessaire dans le cas de mon modèle de mise à jour n'est pas venu avec toutes les informations. Si certaines valeurs dosn pas changer, mais ont pour déclencher.
Donc, au lieu de vérifier les contre indéfini, prendre la "typeof" et de vérifier l'old_fieldcontainer à l'encontre de vos valeurs par défaut.
vous devez marquer MW réponse à la réponse correcte pour d'autres personnes à trouver cette question. C'est une bien meilleure solution. Merci!

OriginalL'auteur Kevin Hoffman | 2013-06-05