Cuando AngularJS desencadena un $ ONEVAL, ¿hay alguna forma de decir inmediatamente qué valores en este alcance han cambiado?
-
28-10-2019 - |
Pregunta
Quiero sincronizar los cambios en el servidor automáticamente. Actualmente estoy detectando cambios en un scope.$onEval
Manejador por JSON Serializando el estado de la aplicación y comparándolo con una copia previamente serializada, utilizando Diff-Match-Patch.
Me preguntaba si AngularJS tiene algo incorporado para hacer que esto sea más eficiente.
Solución
Podrías usar múltiples $ reloj'Es en lugar de un solo $onEval
(Tenga en cuenta que $ Watch puede tomar una función como un argumento en lugar de una cadena/expresión, y en la versión> = 0.10.0 los valores observados se comparan usando angular.object.equals). Aparte de eso, no conozco ningún mecanismo de AngularJS que sea útil para esto.
Otros consejos
Estoy trabajando en algo similar. Como @psyho sugirió que estoy usando $ reloj Para atrapar los cambios.
scope.$watch("dataObject",function (newValue, oldValue) {
//calculate changes
//send the changes to the server
});
Luego uso la lógica de jQuery diff para calcular qué cambios se hicieron.