modal - script type= text/javascript para que sirve
La posición de desplazamiento no se restablecerá cuando vaya a otra página después de presionar el botón Atrás (3)
Esto es lo que he agregado a la famosa phonecatApp del tutorial de AngularJS y funciona:
phonecatApp.run(function($rootScope, $window) {
$rootScope.$on(''$viewContentLoaded'', function(){
$(document).ready(function(){ window.scrollTo(0, 0); });
});
});
Tengo un problema con el desplazamiento en la aplicación angularjs.
En este momento tiene 2 páginas: la primera página es una lista de clientes, puede seleccionar uno de ellos y ver sus detalles. La segunda es una lista de empresas, funciona de la misma manera.
Estoy usando un panel para navegar entre ellos usando $location.path()
. Y la aplicación también tiene un botón de retroceso, que usa $window.history.back()
.
Cuando selecciona uno de los elementos en la lista de clientes o compañías, y luego, cuando presiona el botón para regresar, regresa a la página anterior (lista de clientes o compañías) con la restauración de la posición de desplazamiento. Estoy usando la característica estándar $window.history.back()
, no implemento nada personalizado.
Pero aquí es donde ocurre el problema: si sin desplazarse en cualquier dirección, simplemente vaya a otra página (a otra lista de elementos) la posición de desplazamiento no se restablecerá . Pero si lo desplazas solo un poco, la posición se restablecerá. Además, si no usas el botón Atrás, todo funciona bien.
Entonces, la pregunta es : ¿cómo podemos restablecer la posición de desplazamiento cuando vamos a otra página después de usar $window.history.back()
?
También estoy usando el complemento de infinite-scroll
, si importa. Pero incluso cuando lo apagué, nada cambió, así que supongo que el problema no está en el complemento.
Puede capturar eventos de recarga activando funciones en el inicio de su controlador, siempre que estos controladores estén envueltos en una Expresión de Función Invocada Inmediatamente . Al igual que:
(function() {
angular.module("pstat")
.controller("homeCtrl", homeCtrl);
homeCtrl.$inject = [''$log'', ''dataService'', ''localStorageService'', ''$http''];
function homeCtrl ($log, dataService, localStorageService, $http) {
var vm = this;
$(document).getElementById("yourId").scrollTop(0);
});
})()
Esto forzará a la página a tener un desplazamiento de desplazamiento vertical de 0 cuando se inicializa el controlador, IE en el evento $ window.history.back que llega a esta página.
Tuve un problema similar hace tiempo y se me ocurrió una solución simple (pero no elegante).
Cuando se modifica la vista, he guardado el valor de enrollador de contenedor en el ámbito. Cuando volví, volví a aplicar ese valor uno en la envoltura.
En realidad no recuerdo cómo se comporta al hacer clic en el botón de retroceso. Necesitas comprobar eso.
Cambiar la vista y almacenar el valor de scrollTop https://github.com/jedrzejchalubek/Reed/blob/master/src/app/controller/all.js#L20
angular.extend($scope.view, {
panel: false,
section: ''single'',
single: el,
scrollPosition: $(''#thumbs'').scrollTop()
});
Volver atrás y volver a aplicar el valor scrollTop https://github.com/jedrzejchalubek/Reed/blob/master/src/app/directives/back-to-list.js#L14
scope.$apply(function() {
scope.view.section = ''list'';
scope.view.panel = false;
});
$(''#thumbs'').scrollTop( scope.view.scrollPosition );
El proyecto está en github, así que puedes escanearlo. Tal vez eso ayude. https://github.com/jedrzejchalubek/Reed