Persistir queryString entre vistas

Me encontre con la situacion de tener que mantener el queryString entre distintas vistas cuando necesito navegar una paginador y contener links dentro de lo que voy actualizando segun las paginas.Por ejemplo para este blog, cuando en el menú de la izquierda tengo que ir cambiando de página, los links a los posts quiero que mantengan el número de la página que estoy viendo en ese momento para si navego uno de esos links no ir a la página 1 del paginador de posts.Para lograrlo hay que:

Exponer nuestro $location.search() a las vistas. Este $location.search() nos devuelve todo el contenido del queryString en formato de objeto {id: 1, slug: ‘test’}.

Actualizar lo que vamos a exponer para los links que mantengan ese queryString si cambiamos algún parámetro de nuestro $location.search()En las vistas poner nuestro queryString que expusimos en el controlador.

Por ejemplo, en nuestro controller:

function MainCtrl($log, $routeParams, $location, PostService) {
  // con $.param convertimos todo el contenido de $location.search()
  vm.search = $.param($location.search());
  // si tenemos una funcion que llamamos al cambiar la pagina en algun paginador y
  // queremos mantener dicha infomacion en los links podemos hacer
  function pageChanged() {
    $location.search('page', vm.currentPage);
    vm.search = $.param($location.search());
  }
}

Y en la vista los links vamos a armar los ng-href para mantener ese queryString que nos interesa:


ng-href="/path-to/?{{vm_main.search}}"
Esta fue la forma mas prolija que encontré hasta el momento.

Leave a Reply

Your email address will not be published. Required fields are marked *