I have a web page that serves as the editor for a single entity, which sits as a deep graph in the $scope.fieldcontainer property. After I get a response from my REST API (via $resource), I add a watch to ‘fieldcontainer’. I am using this watch to detect if the page/entity is “dirty”. Right now I’m making the save button bounce but really I want to make the save button invisible until the user dirties the model.
What I am getting is a single trigger of the watch, which I think is happening because the .fieldcontainer = … assignment takes place immediately after I create my watch. I was thinking of just using a “dirtyCount” property to absorb the initial false alarm but that feels very hacky … and I figured there has to be an “Angular idiomatic” way to deal with this – I’m not the only one using a watch to detect a dirty model.
Here’s the code where I set my watch:
$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);
});
I just keep thinking there’s got to be a cleaner way to do this than guarding my “UI dirtying” code with an “if (dirtyCount >0)”…