rutas personalizadas ejemplos directivas javascript angularjs setinterval

javascript - personalizadas - ng-view



En AngularJS, ¿cómo detectar cuándo el usuario abandona la plantilla/página? (4)

Estoy usando el comando Javascript: setInterval. Me gusta detenerlo cuando el usuario abandona la página.

Este código parece funcionar bien: http://jsfiddle.net/PQz5k/

Detecta cuando un usuario deja una página. Ejecuta código JavaScript cuando un usuario hace clic en un enlace para ir a una página HTML o URL diferente, o si el usuario vuelve a cargar la página.

Sin embargo, no funciona cuando voy de una plantilla AngularJS a otra. Como ejemplo, si estoy en template1.html, quiero que el código JavaScript haga algo en Controller1.js cuando el usuario abandona template1.html para ir a template2.html. ¿Cuál es el equivalente de este código a continuación en AngularJS ?:

$(window).on(''beforeunload'', function() { return ''Your own message goes here...''; });​


Creo que tienes dos controladores, uno para cada plantilla como esta:

function Controller_1($scope...){ ... } function Controller_2($scope...){ ... }

Bueno, cuando cambias de una plantilla a otra hay un evento que se llama $ destroy, puedes leerlo aquí http://docs.angularjs.org/api/ng.$rootScope.Scope#$destroy

Digamos que estoy cambiando de la plantilla con Controller_1 a la plantilla con Controller_2. Controller_1 tiene un intervalo que me gustaría detener. Puedes lograr esto con:

function Controller_1($scope, $interval...){ var myInterval = $interval(...); $scope.$on("$destroy", function(){ $interval.cancel(myInterval); }); }

Esto significa que cuando se destruya $ scope for Controller_1, se llamará al evento y se borrará el intervalo.


Esto es para cuando deja una plantilla (también solicita un diálogo de confirmación):

function Controller_1($scope...){ var myInterval = setInterval(...); $scope.$on(''$locationChangeStart'', function (event, next, current) { console.log(current); if (current.match("//yourCurrentRoute")) { var answer = confirm("Are you sure you want to leave this page?"); if (!answer) { event.preventDefault(); }else{ clearInterval(myInterval); } } }); }


Puede usar un observador para verificar cuándo se cambia la ruta de ubicación, algo como esto:

$scope.$watch(function(){ return $location.path(); }, function(newPath, oldPath){ //...Do something })

Luego, puedes obtener la ubicación anterior y la nueva ubicación y ejecutar una función o lo que quieras,


si está usando ui-router, puede usar la propiedad onExit

$stateProvider.state(''foo'', { url: ''/foo'', templateUrl: ''views/foo.html'', controller: ''fooController'', onExit: [''$fooService'', function($fooService) => { $fooService.hide();//do what u want to do here }] });