Tengo una página web que sirve como editor para una sola entidad, que se ubica como un gráfico profundo en la propiedad $ scope.fieldcontainer. Después de recibir una respuesta de mi API REST (a través de $ resource), agrego un reloj a 'fieldcontainer'. Estoy usando este reloj para detectar si la página / entidad está "sucia". En este momento estoy haciendo que el botón Guardar rebote, pero realmente quiero hacer que el botón Guardar sea invisible hasta que el usuario ensucie el modelo.
Lo que estoy obteniendo es un solo disparador del reloj, lo que creo que está sucediendo porque la asignación .fieldcontainer = ... se lleva a cabo inmediatamente después de crear mi reloj. Estaba pensando en usar una propiedad "dirtyCount" para absorber la falsa alarma inicial, pero eso se siente muy hacky ... y pensé que tenía que haber una manera "idiomática angular" para lidiar con esto: no soy el único usando un reloj para detectar un modelo sucio.
Aquí está el código donde configuré mi reloj:
$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);
});
Solo sigo pensando que debe haber una forma más limpia de hacerlo que proteger mi código de "ensuciamiento de la interfaz de usuario" con un "if (dirtyCount> 0)" ...
undefined
. Tiene un valor predeterminado que es necesario en el caso de que la actualización de mi modelo no proporcione toda la información. Por lo tanto, algunos valores no cambian pero tienen que activarse.