Tengo un evento click que ocurre fuera del alcance de mi directiva personalizada, así que en lugar de usar el atributo "ng-click", estoy usando un oyente jQuery.click () y llamo a una función dentro de mi alcance de la siguiente manera:
$('html').click(function(e) {
scope.close();
);
close () es una función simple que se ve así:
scope.close = function() {
scope.isOpen = false;
}
En mi opinión, tengo un elemento con "ng-show" vinculado a isOpen como este:
<div ng-show="isOpen">My Div</div>
Al depurar, encuentro que se llama a close (), isOpen se actualiza a falso, pero la vista AngularJS no se actualiza. ¿Hay alguna forma de decirle a Angular manualmente que actualice la vista? ¿O hay un enfoque más "angular" para resolver este problema que no estoy viendo?
javascript
angularjs
Dustin
fuente
fuente
$scope.$apply();
?¿Por qué
$apply
debería llamarse?TL; DR :
$apply
debe llamarse siempre que desee aplicar cambios realizados fuera del mundo angular.Solo para actualizar la respuesta de @ Dustin , aquí hay una explicación de lo que $ apply hace exactamente y por qué funciona.
Angular permite que cualquier valor se use como un objetivo vinculante. Luego, al final de cualquier turno de código JavaScript, verifica si el valor ha cambiado. Ese paso que verifica si algún valor de enlace ha cambiado realmente tiene un método,
$scope.$digest()
1 . Casi nunca lo llamamos directamente, ya que usamos$scope.$apply()
en su lugar (que llamará$scope.$digest
).Angular solo monitorea las variables utilizadas en expresiones y cualquier cosa dentro de una
$watch
vida dentro del alcance. Por lo tanto, si está cambiando el modelo fuera del contexto angular, deberá$scope.$apply()
solicitar la propagación de dichos cambios; de lo contrario, Angular no sabrá que se han modificado, por lo que el enlace no se actualizará 2 .fuente
Utilizar
recuerde inyectar
$route
a su controlador.fuente
$state.reload()