Debe saber cómo funciona AngularJS para comprenderlo.
Ciclo de resumen y $ scope
En primer lugar, AngularJS define un concepto del llamado ciclo de digestión . Este ciclo puede considerarse como un ciclo, durante el cual AngularJS verifica si hay algún cambio en todas las variables observadas por todos los $scope
s. Entonces, si ha $scope.myVar
definido en su controlador y esta variable fue marcada para ser observada , entonces está indicando implícitamente a AngularJS que monitoree los cambios myVar
en cada iteración del ciclo.
Una pregunta de seguimiento natural sería: ¿Está todo relacionado con $scope
ser observado? Afortunadamente no. Si observa los cambios en cada objeto en su $scope
, entonces un ciclo de resumen tardaría años en evaluarse y rápidamente tendría problemas de rendimiento. Es por eso que el equipo de AngularJS nos dio dos formas de declarar algunas $scope
variables como observadas (lea a continuación).
$ watch ayuda a escuchar los cambios de $ alcance
Hay dos formas de declarar una $scope
variable como observada.
- Al usarlo en su plantilla a través de la expresión
<span>{{myVar}}</span>
- Al agregarlo manualmente a través del
$watch
servicio
Anuncio 1) Este es el escenario más común y estoy seguro de que lo has visto antes, pero no sabías que esto ha creado un reloj en segundo plano. Sí, lo hizo! El uso de directivas AngularJS (como ng-repeat
) también puede crear relojes implícitos.
Anuncio 2) Así es como creas tus propios relojes . $watch
El servicio le ayuda a ejecutar algún código cuando algún valor adjunto al $scope
ha cambiado. Raramente se usa, pero a veces es útil. Por ejemplo, si desea ejecutar algún código cada vez que cambia 'myVar', puede hacer lo siguiente:
function MyController($scope) {
$scope.myVar = 1;
$scope.$watch('myVar', function() {
alert('hey, myVar has changed!');
});
$scope.buttonClicked = function() {
$scope.myVar = 2; // This will trigger $watch expression to kick in
};
}
$ apply permite integrar cambios con el ciclo de resumen
Puede pensar en la $apply
función como un mecanismo de integración . Verá, cada vez que cambia alguna variable observada$scope
directamente al objeto, AngularJS sabrá que el cambio ha sucedido. Esto se debe a que AngularJS ya sabía monitorear esos cambios. Entonces, si sucede en el código administrado por el marco, el ciclo de resumen continuará.
Sin embargo, a veces desea cambiar algún valor fuera del mundo AngularJS y ver que los cambios se propagan normalmente. Considere esto: tiene un $scope.myVar
valor que se modificará dentro de un $.ajax()
controlador jQuery . Esto sucederá en algún momento en el futuro. AngularJS no puede esperar a que esto suceda, ya que no se le ha ordenado que espere en jQuery.
Para hacer frente a esto, $apply
se ha introducido. Le permite comenzar el ciclo de digestión explícitamente. Sin embargo, solo debe usar esto para migrar algunos datos a AngularJS (integración con otros marcos), pero nunca use este método combinado con el código regular de AngularJS, ya que AngularJS arrojará un error en ese momento.
¿Cómo se relaciona todo esto con el DOM?
Bueno, realmente deberías seguir el tutorial nuevamente, ahora que sabes todo esto. El ciclo de resumen asegurará que la IU y el código JavaScript permanezcan sincronizados, evaluando cada observador conectado a todos $scope
los mensajes mientras no cambie nada. Si no se producen más cambios en el ciclo de resumen, se considera que está terminado.
Puede adjuntar objetos al $scope
objeto explícitamente en el Controlador o declarándolos en {{expression}}
forma directamente en la vista.
Espero que eso ayude a aclarar algunos conocimientos básicos sobre todo esto.
Lecturas adicionales: